page contents

使用PHP实现的服务端socket

各大语言实现socket通信的方式都是大同小异,在服务端的流程都是差不多的。在有现成高性能socket通信框架的情况下,建议不要自己去实现,但是得理解框架底层是怎样实现的。

attachments-2020-05-Ioe5Rodd5ec6362075e21.jpg

实现

相关函数: socket_create、socket_set_block、socket_bind、socket_listen、socket_accept、socket_read、socket_write,这些函数具体参数说明在PHP文档上写很详细,这里就不再赘述,这里只是介绍服务端如何处理请求。

//确保在连接客户端时不会超时
set_time_limit(0);
//设置IP和端口号
$address = "127.0.0.1";
$port = 54321;
$socketServer = socket_create(AF_INET, SOCK_STREAM, SOL_TCP) or die("socket_create() fail:" . socket_strerror(socket_last_error()) . "/n");
//设置为阻塞模式
socket_set_block($socketServer) or die("socket_set_block() fail:" . socket_strerror(socket_last_error()) . "/n");
//绑定端口
$result = socket_bind($socketServer, $address, $port) or die("socket_bind() fail:" . socket_strerror(socket_last_error()) . "/n");
//开始监听
$result = socket_listen($socketServer, 4) or die("socket_listen() fail:" . socket_strerror(socket_last_error()) . "/n");
 
do {
    //接收连接请求并返回一个子Socket来处理客户端和服务器间的信息
    $sock = socket_accept($socketServer) or  die("socket_accept() failed: reason: " . socket_strerror(socket_last_error()) . "/n");
    while($sock){
        //读取客户端数据
        echo "Read client data \n";
 
        $length = socket_read($sock, 4);
        $length = unpack('i', $length);
        echo "length:$length[1]   \n";
 
        $request = socket_read($sock, $length[1]);
        echo "$request:$request   \n";
 
 
        //数据传送 向客户端写入返回结果
        $msg = "this is response message \n";
        $msgLength = strlen($msg);
        $msgLength = pack('i', $msgLength);
        socket_write($sock, $msgLength);
        socket_write($sock, $msg, strlen($msg)) or die("socket_write() failed: reason: " . socket_strerror(socket_last_error()) ."/n");
        break;
    }
 
} while (true);
socket_close($socketServer);

在接收到客户端的请求后,可以结合PHP的多线程进行处理,这里只是简单的返回字符串。


总结

各大语言实现socket通信的方式都是大同小异,在服务端的流程都是差不多的。在有现成高性能socket通信框架的情况下,建议不要自己去实现,但是得理解框架底层是怎样实现的。



attachments-2020-05-q7BuVZHU5ec636121d3fd.jpg

  • 发表于 2020-05-21 16:04
  • 阅读 ( 508 )
  • 分类:PHP开发

你可能感兴趣的文章

相关问题

0 条评论

请先 登录 后评论
Pack
Pack

1135 篇文章

作家榜 »

  1. 轩辕小不懂 2403 文章
  2. 小柒 1316 文章
  3. Pack 1135 文章
  4. Nen 576 文章
  5. 王昭君 209 文章
  6. 文双 71 文章
  7. 小威 64 文章
  8. Cara 36 文章