快速业务通道

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

作者 佚名技术 来源 NET编程 浏览 发布时间 2012-05-26
$i = 0 ; $i <= count( $this->clientFD ); $i++ ){
    if( !isset( $this->clientFD[$i] ) || $this->clientFD[$i] == NULL ){
     $this->clientFD[$i] = socket_accept( $socket );
     socket_setopt( $this->clientFD[$i], SOL_SOCKET, SO_REUSEADDR, 1 );
     $peer_host = "";
     $peer_port = "";
     socket_getpeername( $this->clientFD[$i], $peer_host, $peer_port );
     $this->clientInfo[$i] = array(
              "host"   => $peer_host,
              "port"   => $peer_port,
              "connectOn" => time()
             );
     $this->clients++;

     $this->sendDebugMessage( "New connection ( ".$i." ) from ".$peer_host." on port ".$peer_port );

     if( method_exists( $this, "onConnect" ) )
      $this->onConnect( $i );
     return $i;
    }
   }
}

/**
* check, whether a client is still connected
*
* @access public
* @param integer $id client id
* @return boolean $connected true if client is connected, false otherwise
*/
function isConnected( $id ){
   if( !isset( $this->clientFD[$id] ) )
    return false;
   return true;
}

/**
* close connection to a client
*
* @access public
* @param int $clientID internal ID of the client
*/
function closeConnection( $id ){
   if( !isset( $this->clientFD[$id] ) )
    return false;

   if( method_exists( $this, "onClose" ) )
    $this->onClose( $id );

   $this->sendDebugMessage( "Closed connection ( ".$id." ) from ".$this->clientInfo[$id]["host"]." on port ".$this->clientInfo[$id]["port"] );

   @socket_close( $this->clientFD[$id] );
   $this->clientFD[$id] = NULL;
   unset( $this->clientInfo[$id] );
   $this->clients--;
}

/**
* shutdown server
*
* @access public
*/
function shutDown(){
   if( $GLOBALS["_patServerStatus"] != "running" )
    exit;
   $GLOBALS["_patServerStatus"] = "stopped";

   if( method_exists( $this, "onShutdown" ) )
    $this->onShutdown();

   $maxFD = count( $this->clientFD );
   for( $i = 0; $i < $maxFD; $i++ )
    $this->closeConnection( $i );

   @socket_close( $this->initFD );

   $this->sendDebugMessage( "Shutdown server." );
   exit;
}

/**
* get current amount of clients
*
* @access public
* @return int $clients amount of clients
*/
function getClients(){
   return $th

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