Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

How to keep a php web socket connection open after first connection

I'm using the following code as the server for sockets while i'm trying to learn sockets, but the client code will work once, i have to run the server script every time before i run the clint code.

And so when do i ran this server.php to keep listening for client requests?

SERVER.PHP

$host = "127.0.0.1";
$port = 25003;
set_time_limit(0);
$socket = socket_create(AF_INET, SOCK_STREAM, 0) or die("Could not create socket\n");
$result = socket_bind($socket, $host, $port) or die("Could not bind to socket\n");
$result = socket_listen($socket, 3) or die("Could not set up socket listener\n");
$spawn = socket_accept($socket) or die("Could not accept incoming connection\n");
$input = socket_read($spawn, 1024) or die("Could not read input\n");
if ($input == "Hey"){
    $input = "Hey you don't shout me. Talk properly...";
    } else if ($input == "Vetra"){
        $input = "Hello how are you there, whats your name?";
        } else { $input = "Well, what can i say, you must be a human being.";
}
echo $input;
$output = $input . "\n";
socket_write($spawn, $output, strlen ($output)) or die("Could not write output\n");
//socket_close($spawn);
//socket_close($socket);

CLIENT.PHP

$host    = "127.0.0.1";
$port    = 25003;
$message = $_POST['data'];
$socket = socket_create(AF_INET, SOCK_STREAM, 0) or die("Could not create socket\n");
$result = socket_connect($socket, $host, $port) or die("Could not connect to server\n");  
socket_write($socket, $message, strlen($message)) or die("Could not send data to server\n");
$result = socket_read ($socket, 1024) or die("Could not read server response\n");
echo $result;
//socket_close($socket);
like image 857
user3109875 Avatar asked Mar 31 '26 02:03

user3109875


1 Answers

You should waiting for new connections in infinite loop:

$host = "127.0.0.1";
$port = 25003;
set_time_limit(0);
$socket = socket_create(AF_INET, SOCK_STREAM, 0) or die("Could not create socket\n");
$result = socket_bind($socket, $host, $port) or die("Could not bind to socket\n");
$result = socket_listen($socket, 3) or die("Could not set up socket listener\n");
while(true) {
  $spawn = socket_accept($socket) or die("Could not accept incoming connection\n");
  $input = socket_read($spawn, 1024) or die("Could not read input\n");
  if ($input == "Hey"){
    $input = "Hey you don't shout me. Talk properly...";
  } else if ($input == "Vetra"){
    $input = "Hello how are you there, whats your name?";
  } else {
    $input = "Well, what can i say, you must be a human being.";
  }
  echo $input.PHP_EOL;
  $output = $input . "\n";
  socket_write($spawn, $output, strlen ($output)) or die("Could not write output\n");
  socket_close($spawn);
}
like image 145
ziollek Avatar answered Apr 02 '26 02:04

ziollek



Donate For Us

If you love us? You can donate to us via Paypal or buy me a coffee so we can maintain and grow! Thank you!