PHP Socket server performance

Collapse
X
 
  • Time
  • Show
Clear All
new posts
  • bnashenas1984
    Contributor
    • Sep 2007
    • 257

    PHP Socket server performance

    Hi everyone
    I really need some help with my socket server code.
    I'm using this code for gaming purpose which more than 20,000 users might be connected to at once.

    I know that the code works fine right now with 4 or 5 users connected for testing. But what happens when 30,000 players are connected? Will it still work or does it get slow or crash?

    I know this could be done with many other languages but right now I need it in PHP.

    Thanks

    Code:
    <?php
    error_reporting(E_ALL);
    set_time_limit(0);
    
    ob_implicit_flush();
    
    $address = '192.168.56.1';
    $port = 1234;
    
    function send_Message($listOfClients, $buf){
    	if (is_array($listOfClients)){
    		foreach($listOfClients as $currentClient){
    			socket_write($currentClient, $buf);
    		}
    	} else {
    		socket_write($listOfClients, $buf.chr(0));
    	}
    }
    
    if (($master = socket_create(AF_INET, SOCK_STREAM, SOL_TCP)) < 0) {die ("socket_create() failed, reason: " . socket_strerror($master) . "\n");}
    
    socket_set_option($master, SOL_SOCKET,SO_REUSEADDR, 1);
    
    if (($ret = socket_bind($master, $address, $port)) < 0){die("socket_bind() failed, reason: " . socket_strerror($ret) . "\n");}
    
    if (($ret = socket_listen($master, 5)) < 0){
        die("socket_listen() failed, reason: " . socket_strerror($ret) . "\n");
    } else {
    	echo 'Server Running...';
    }
    
    
    
    $read_sockets = array($master);
    
    while (true) {
       $changed_sockets = $read_sockets;
       
       $num_changed_sockets = socket_select($changed_sockets, $write = NULL, $except = NULL, 5);
    	
       foreach($changed_sockets as $socket) {
           if ($socket == $master) {
               if (($client = socket_accept($master)) < 0){
                   //echo "socket_accept() failed: reason: " . socket_strerror($msgsock) . "\n";
                   continue;
               } else {
                  array_push($read_sockets, $client);
    			  send_Message($client, $client); 
               }
           } else {
               $bytes = socket_recv($socket, $buffer, 2048, 0);
    
               if ($bytes == 0){
                   $index = array_search($socket, $read_sockets);
                   unset($read_sockets[$index]);
                   socket_close($socket);
               } else {
    			   	$allclients = $read_sockets;
    				array_shift($allclients);
    				send_Message($allclients, $buffer.chr(0));
    				if (trim($buffer) == 'exit'){socket_close($master); die('<br>Server stoped!!!');}
    			}
       
           }
       }
       
    }
    ?>
  • bnashenas1984
    Contributor
    • Sep 2007
    • 257

    #2
    Anybody? Any suggestions will be highly appreciated...

    Comment

    Working...