suchen
Heimphp教程php手册用PHP的Socket建立自己的聊天室服务器

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

Jun 13, 2016 am 10:34 AM
phpserversocket建立服务器verwendenvon聊天室eigen

/**
* patServer
* PHP socket server base class
* Events that can be handled:
*   * onStart
*   * onConnect
*   * onConnectionRefused
*   * onClose
*   * onShutdown
*   * onReceiveData
*
* @version 1.1
* @author   Stephan Schmidt
* @package patServer
*/
class patServer{
/**
* information about the project
* @var array $systemVars
*/
var $systemVars   = array(

    "appName"   => "patServer",
    "appVersion"   => "1.1",
    "author"   => array("Stephan Schmidt ", )
   );

/**
* port to listen
* @var integer   $port
*/
   var $port   = 10000;

/**
* domain to bind to
* @var string $domain
*/
   var $domain   = "localhost";

/**
* maximum amount of clients
* @var integer $maxClients
*/
   var $maxClients = -1;

/**
* buffer size for socket_read
* @var integer $readBufferSize
*/
   var $readBufferSize   = 128;

/**
* end character for socket_read
* @var integer $readEndCharacter
*/
   var $readEndCharacter = " ";

/**
* maximum of backlog in queue
* @var integer $maxQueue
*/
   var $maxQueue = 500;

/**
* debug mode
* @var boolean $debug
*/
   var $debug   = true;

/**
* debug mode
* @var string $debugMode
*/
   var $debugMode = "text";

/**
* debug destination (filename or stdout)
* @var string $debugDest
*/
   var $debugDest = "stdout";

/**
* empty array, used for socket_select
* @var array $null
*/
   var $null   = array();

/**
* all file descriptors are stored here
* @var array $clientFD
*/
   var $clientFD = array();

/**
* needed to store client information
* @var array $clientInfo
*/
   var $clientInfo = array();

/**
* needed to store server information
* @var array $serverInfo
*/
   var $serverInfo = array();

/**
* amount of clients
* @var integer   $clients
*/
   var $clients = 0;

/**
* create a new socket server
*
* @access public
* @param string   $domain   domain to bind to
* @param integer   $port   port to listen to
*/
function patServer( $domain = "localhost", $port = 10000 ){
   $this->domain = $domain;
   $this->port   = $port;

   $this->serverInfo["domain"]         = $domain;
   $this->serverInfo["port"]         = $port;
   $this->serverInfo["servername"]     = $this->systemVars["appName"];
   $this->serverInfo["serverversion"] = $this->systemVars["appVersion"];

   set_time_limit( 0 );
}

/**
* set maximum amount of simultaneous connections
*
* @access public
* @param int $maxClients
*/
function setMaxClients( $maxClients ){
   $this->maxClients = $maxClients;
}

/**
* set debug mode
*
* @access public
* @param mixed $debug [text|htmlfalse]
* @param string $dest destination of debug message (stdout to output or filename if log should be written)
*/
function setDebugMode( $debug, $dest = "stdout" ){
   if( $debug === false ){
    $this->debug = false;
    return true;
   }

   $this->debug   = true;
   $this->debugMode = $debug;
   $this->debugDest = $dest;
}

/**
* start the server
*
* @access public
* @param int $maxClients
*/
function start(){
   $this->initFD = @socket_create( AF_INET, SOCK_STREAM, 0 );
   if( !$this->initFD )
    die( "patServer: Could not create socket." );

   // adress may be reused
   socket_setopt( $this->initFD, SOL_SOCKET, SO_REUSEADDR, 1 );

   // bind the socket
   if(!@socket_bind( $this->initFD, $this->domain, $this->port ) ){
    @socket_close( $this->initFD );
    die( "patServer: Could not bind socket to ".$this->domain." on port ".$this->port." ( ".$this->getLastSocketError( $this->initFd )." )." );
   }

   // listen on selected port
   if(!@socket_listen( $this->initFD, $this->maxQueue ) )
    die( "patServer: Could not listen ( ".$this->getLastSocketError( $this->initFd )." )." );

   $this->sendDebugMessage( "Listening on port ".$this->port.". Server started at ".date( "H:i:s", time() ) );

   // this allows the shutdown function to check whether the server is already shut down
   $GLOBALS["_patServerStatus"] = "running";
   // this ensures that the server will be sutdown correctly
   register_shutdown_function( array( $this, "shutdown" ) );

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

   $this->serverInfo["started"] = time();
   $this->serverInfo["status"]   = "running";

   while( true ){
    $readFDs = array();
    array_push( $readFDs, $this->initFD );

    // fetch all clients that are awaiting connections
    for( $i = 0; $i clientFD ); $i++ )
     if( isset( $this->clientFD[$i] ) )
      array_push( $readFDs, $this->clientFD[$i] );

    // block and wait for data or new connection
    $ready = @socket_select( $readFDs, $this->null, $this->null, NULL );

    if( $ready === false ){
     $this->sendDebugMessage( "socket_select failed." );
     $this->shutdown();
    }

    // check for new connection
    if( in_array( $this->initFD, $readFDs ) ){
     $newClient = $this->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       continue;
    }

    // check all clients for incoming data
    for( $i = 0; $i clientFD ); $i++ ){

Stellungnahme
Der Inhalt dieses Artikels wird freiwillig von Internetnutzern beigesteuert und das Urheberrecht liegt beim ursprünglichen Autor. Diese Website übernimmt keine entsprechende rechtliche Verantwortung. Wenn Sie Inhalte finden, bei denen der Verdacht eines Plagiats oder einer Rechtsverletzung besteht, wenden Sie sich bitte an admin@php.cn

Heiße KI -Werkzeuge

Undresser.AI Undress

Undresser.AI Undress

KI-gestützte App zum Erstellen realistischer Aktfotos

AI Clothes Remover

AI Clothes Remover

Online-KI-Tool zum Entfernen von Kleidung aus Fotos.

Undress AI Tool

Undress AI Tool

Ausziehbilder kostenlos

Clothoff.io

Clothoff.io

KI-Kleiderentferner

AI Hentai Generator

AI Hentai Generator

Erstellen Sie kostenlos Ai Hentai.

Heiße Werkzeuge

SublimeText3 chinesische Version

SublimeText3 chinesische Version

Chinesische Version, sehr einfach zu bedienen

MinGW – Minimalistisches GNU für Windows

MinGW – Minimalistisches GNU für Windows

Dieses Projekt wird derzeit auf osdn.net/projects/mingw migriert. Sie können uns dort weiterhin folgen. MinGW: Eine native Windows-Portierung der GNU Compiler Collection (GCC), frei verteilbare Importbibliotheken und Header-Dateien zum Erstellen nativer Windows-Anwendungen, einschließlich Erweiterungen der MSVC-Laufzeit zur Unterstützung der C99-Funktionalität. Die gesamte MinGW-Software kann auf 64-Bit-Windows-Plattformen ausgeführt werden.

Dreamweaver CS6

Dreamweaver CS6

Visuelle Webentwicklungstools

mPDF

mPDF

mPDF ist eine PHP-Bibliothek, die PDF-Dateien aus UTF-8-codiertem HTML generieren kann. Der ursprüngliche Autor, Ian Back, hat mPDF geschrieben, um PDF-Dateien „on the fly“ von seiner Website auszugeben und verschiedene Sprachen zu verarbeiten. Es ist langsamer und erzeugt bei der Verwendung von Unicode-Schriftarten größere Dateien als Originalskripte wie HTML2FPDF, unterstützt aber CSS-Stile usw. und verfügt über viele Verbesserungen. Unterstützt fast alle Sprachen, einschließlich RTL (Arabisch und Hebräisch) und CJK (Chinesisch, Japanisch und Koreanisch). Unterstützt verschachtelte Elemente auf Blockebene (wie P, DIV),

Senden Sie Studio 13.0.1

Senden Sie Studio 13.0.1

Leistungsstarke integrierte PHP-Entwicklungsumgebung