【问题标题】:Reusable socket可重复使用的插座
【发布时间】:2011-01-31 04:35:47
【问题描述】:

我尝试在 php 中创建一个套接字并从其他进程中重用它。 我知道这可以通过守护程序脚本来完成,但我想不这样做。

我创建了一个套接字并将其绑定到特定端口。

$sock = socket_create (AF_INET, SOCK_STREAM, SOL_TCP);  
socket_set_option ($sock, SOL_SOCKET, SO_REUSEADDR, 1); 
socket_bind ($sock, 'xx.xx.xx.xx', 10000);
socket_connect ($sock, $host, $port);

我从另一个 php 文件中做了同样的事情。但是我从 2 文件发送的数据包没有被主机“验证”。我嗅探了所有端口,发现它使用相同的本地和目标端口。我不明白问题出在哪里。

你能帮我解决这个问题吗? 任何其他编程语言或任何其他解决方案都可以。

安德鲁

【问题讨论】:

    标签: php sockets reusability


    【解决方案1】:

    您不能真正在 php 中使用持久套接字。当您执行 php 文件时,会创建一个新进程,该进程无法访问不同 php 进程的变量或套接字,因此它不会知道是否已经存在套接字并创建它。

    【讨论】:

    • 好的,还有其他解决方案吗?
    • 长期过程如何,例如解析?您可以在 PHP 中使用持久套接字。
    • @mmoreram 重点仍然存在;一个进程执行一个脚本。如果两个脚本在独立的进程中运行,除非您有某种形式的进程间通信,否则它们不会相互了解。如果您的托管模型不支持,那么您可以拥有长期流程这一事实是无关紧要的。
    【解决方案2】:

    套接字不是对称的。服务器端侦听客户端连接的特定端口 - 客户端不指定本地端口 - 仅指定远程端口和地址。它与您实现它的语言无关。

    http://www.phpclasses.org/browse/package/5758.html 提供了一个非常好的套接字服务器实现,并附有示例。

    C.

    【讨论】:

      猜你喜欢
      • 2013-02-23
      • 1970-01-01
      • 2010-11-12
      • 2013-04-02
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2014-01-06
      相关资源
      最近更新 更多