【问题标题】:PHP socket client in loop itertion循环迭代中的 PHP 套接字客户端
【发布时间】:2013-08-30 16:24:53
【问题描述】:

我想在 PHP 中实现一个客户端套接字。

套接字类型为 TCP/IP 并运行全双工通道。 客户端必须每秒向服务器发送请求,所以必须循环运行。

我是否必须为每个请求重新创建并连接到套接字? 还是通过循环创建并连接到外部的套接字然后管理通信更好?

<?php
   while (true) {
      //management of the pid here
      //create the socket
      $socket = socket_create (AF_INET, SOCK_STREAM, 0);
      //send the request
      $sent = socket_write ($socket, <query>, <length>);
      //get the answer
      $response = socket_read ($socket, 1024);
      //close the socket
      socket_shutdown ($socket, 2);
      usleep (500);/ / wait remote host
      socket_close ($socket);
      sleep (1);
   }
?>

我已经实现了循环外的socket连接和里面的请求管理。

但连接会保持活动几分钟,然后在端点连接上返回错误。

这种情况下是否需要使用socket_bind?

谢谢。

【问题讨论】:

    标签: php sockets loops


    【解决方案1】:

    您应该在循环外连接一次套接字,然后在整个应用程序会话中使用它。循环结束后断开套接字。

    【讨论】:

    • 问题是循环必须始终保持活动状态。我必须为持久连接使用特定选项(一段时间后在端点上返回错误)。处理重新连接的最佳方法是什么?谢谢
    • 如果遇到错误,退出循环,重新连接,然后返回循环。
    • 而我正在实现一个客户端:必须使用选项 socket_bind 创建套接字?非常感谢
    • socket_bind() 通常只用于服务器。客户使用socket_connect()
    【解决方案2】:

    创建套接字会消耗大量资源,并且由于您没有连接到多个点,因此您应该在循环之外创建套接字。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2020-07-15
      • 1970-01-01
      • 2014-03-10
      • 2013-04-21
      • 1970-01-01
      相关资源
      最近更新 更多