快速业务通道

用PHP的Socket建立自己的聊天室服务器

作者 佚名技术 来源 NET编程 浏览 发布时间 2012-05-26
is->clients;
}

/**
* send data to a client
*
* @access public
* @param int   $clientId ID of the client
* @param string $data   data to send
* @param boolean $debugData flag to indicate whether data that is written to socket should also be sent as debug message
*/
function sendData( $clientId, $data, $debugData = true ){
   if( !isset( $this->clientFD[$clientId] ) || $this->clientFD[$clientId] == NULL )
    return false;

   if( $debugData )
    $this->sendDebugMessage( "sending: \"" . $data . "\" to: $clientId" );

   if(!@socket_write( $this->clientFD[$clientId], $data ) )
    $this->sendDebugMessage( "Could not write ''".$data."'' client ".$clientId." ( ".$this->getLastSocketError( $this->clientFD[$clientId] )." )." );
}

/**
* send data to all clients
*
* @access public
* @param string $data   data to send
* @param array $exclude client ids to exclude
*/
function broadcastData( $data, $exclude = array(), $debugData = true ){
   if( !empty( $exclude ) && !is_array( $exclude ) )
    $exclude = array( $exclude );

   for( $i = 0; $i < count( $this->clientFD ); $i++ ){
    if( isset( $this->clientFD[$i] ) && $this->clientFD[$i] != NULL && !in_array( $i, $exclude ) ){
     if( $debugData )
      $this->sendDebugMessage( "sending: \"" . $data . "\" to: $i" );

     if(!@socket_write( $this->clientFD[$i], $data ) )
      $this->sendDebugMessage( "Could not write ''".$data."'' client ".$i." ( ".$this->getLastSocketError( $this->clientFD[$i] )." )." );
    }
   }
}

/**
* get current information about a client
*
* @access public
* @param int   $clientId ID of the client
* @return array $info   information about the client
*/
function getClientInfo( $clientId ){
   if( !isset( $this->clientFD[$clientId] ) || $this->clientFD[$clientId] == NULL )
    return false;
   return $this->clientInfo[$clientId];
}

/**
* send a debug message
*
* @access private
* @param string $msg message to debug
*/
function sendDebugMessage( $msg ){
   if( !$this->debug )
    return false;

   $msg = date( "Y-m-d H:i:s", time() ) . " " . $msg;

   switch( $this->debugMode ){
    case "text":
     $msg = $msg."\n";
     break;
    case "html":
     $msg = htmlspecialchars( $msg ) . "<br />\n";
     break;
   }

   if( $this->debugDest == "stdout" || empty( $this->debugDest ) ){
    echo $msg;
    flush();
    return true;
   }

   error_log( $msg, 3, $this->debugDest );
   return t

凌众科技专业提供服务器租用、服务器托管、企业邮局、虚拟主机等服务,公司网站:http://www.lingzhong.cn 为了给广大客户了解更多的技术信息,本技术文章收集来源于网络,凌众科技尊重文章作者的版权,如果有涉及你的版权有必要删除你的文章,请和我们联系。以上信息与文章正文是不可分割的一部分,如果您要转载本文章,请保留以上信息,谢谢!

分享到: 更多

Copyright ©1999-2011 厦门凌众科技有限公司 厦门优通互联科技开发有限公司 All rights reserved

地址(ADD):厦门软件园二期望海路63号701E(东南融通旁) 邮编(ZIP):361008

电话:0592-5908028 传真:0592-5908039 咨询信箱:web@lingzhong.cn 咨询OICQ:173723134

《中华人民共和国增值电信业务经营许可证》闽B2-20100024  ICP备案:闽ICP备05037997号