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
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!!!');}
}
}
}
}
?>
Comment