快速业务通道

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

作者 佚名技术 来源 NET编程 浏览 发布时间 2012-05-26
acceptConnection( $this->initFD );

     // check for maximum amount of connections
     if( $this->maxClients > 0 ){
      if( $this->clients > $this->maxClients ){
       $this->sendDebugMessage( "Too many connections." );

       if( method_exists( $this, "onConnectionRefused" ) )
        $this->onConnectionRefused( $newClient );

       $this->closeConnection( $newClient );
      }
     }

     if( --$ready <= 0 )
      continue;
    }

    // check all clients for incoming data
    for( $i = 0; $i < count( $this->clientFD ); $i++ ){
     if( !isset( $this->clientFD[$i] ) )
      continue;

     if( in_array( $this->clientFD[$i], $readFDs ) ){
      $data = $this->readFromSocket( $i );

      // empty data => connection was closed
      if( !$data ){
       $this->sendDebugMessage( "Connection closed by peer" );
       $this->closeConnection( $i );
      }else{
       $this->sendDebugMessage( "Received ".trim( $data )." from ".$i );

       if( method_exists( $this, "onReceiveData" ) )
        $this->onReceiveData( $i, $data );
      }
     }
    }
   }
}

/**
* read from a socket
*
* @access private
* @param integer $clientId internal id of the client to read from
* @return string $data   data that was read
*/
function readFromSocket( $clientId ){
   // start with empty string
   $data   = "";

   // read data from socket
   while( $buf = socket_read( $this->clientFD[$clientId], $this->readBufferSize ) ){
    $data .= $buf;

    $endString = substr( $buf, - strlen( $this->readEndCharacter ) );
    if( $endString == $this->readEndCharacter )
     break;
    if( $buf == NULL )
     break;
   }

   if( $buf === false )
    $this->sendDebugMessage( "Could not read from client ".$clientId." ( ".$this->getLastSocketError( $this->clientFD[$clientId] )." )." );

   return $data;
}

/**
* accept a new connection
*
* @access public
* @param resource &$socket socket that received the new connection
* @return int    $clientID internal ID of the client
*/
function acceptConnection( &$socket ){
   for(

凌众科技专业提供服务器租用、服务器托管、企业邮局、虚拟主机等服务,公司网站: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号