【问题标题】:How to keep a socket alive after script finish executing脚本完成执行后如何使套接字保持活动状态
【发布时间】:2011-10-19 19:02:01
【问题描述】:

我编写了一个 php 脚本,它通过 tcp 套接字连接到 facebook 聊天。我的问题是:

  1. 如何在 php 脚本结束时保持套接字活动?我希望其他 php 文件通过此套接字与 facebook XMPP 服务器通信?我尝试将套接字保存为会话变量,但没有成功。

  2. 根据一些论坛讨论,我尝试使用 pfsockopen 代替 socket_create。但是当我调用 pfsockopen 函数时,我总是收到失败。

有人知道如何解决这个问题吗?

谢谢!

【问题讨论】:

    标签: php facebook sockets fsockopen


    【解决方案1】:

    为此,您需要一个独立的守护进程。

    【讨论】:

    • 但是如果你有一个独立的守护进程,其他脚本会通过IPC与守护进程通信吗? PHP 脚本是否在相同的内存空间中运行,以便可以直接进行函数调用,或者我们需要 IPC?我是 PHP 新手,我发现为守护进程建立一个新套接字(如上所述)是一个可怕的解决方案?
    • 为此您需要一些 IPC。例如,这可以是 TCP/UDP/Unix 套接字。 PHP 守护程序和网络服务器脚本在不同的地址空间上运行。我只能建议像github.com/kakserpom/phpdaemon 用于守护进程部分,serialize + HTTP 作为 IPC 协议
    • 我就是这么想的。我可以让我的守护程序将 JSON 就绪数据写入 /proc FS,然后写入 PHP Web 脚本,而不是花时间打开一个到守护程序的套接字,它可以简单地从 /proc 读取数据并将其流回.我的猜测是从 /proc FS 读取比打开套接字并读取相同的流要快得多。但在进行全面实施之前,我会尝试证明该理论。
    【解决方案2】:

    您不能在不同的 PHP 脚本之间共享套接字。 @seriyPS 的建议很有意义 - 创建一个 PHP 脚本:

    • 永无止境
    • 打开 FB 聊天的套接字
    • 在另一个套接字上监听

    然后您的 PHP 脚本可以打开该“守护程序”PHP 脚本的套接字,发送一条消息,守护程序将其发送到 FB 并返回 FB 响应。

    【讨论】:

    • @Darhazer:在您的解决方案中,我真的看不出问题是如何解决的。我猜“stella”希望避免为每个客户端请求实际建立连接(创建套接字)。当然,“守护进程”可能已经将套接字打开到 FB,但是 PHP 脚本现在仍然需要连接到守护进程(没有解决问题)?我在这里错过了什么吗?我有一个客户遇到同样的问题,我正在研究解决方案。难道没有一种简单的方法可以避免在 PHP 中打开套接字吗?
    猜你喜欢
    • 1970-01-01
    • 2014-06-01
    • 2010-09-23
    • 1970-01-01
    • 1970-01-01
    • 2011-07-03
    • 1970-01-01
    • 1970-01-01
    • 2018-04-13
    相关资源
    最近更新 更多