tl;dr:保持 PHP 套接字不受 MySQL 操作阻塞的最佳方法是什么?
基本目标:拥有一个 PHP+JAXL (XMPP) 套接字,通过与 Google CCS GCM 服务器的持久 TCP 连接来监听、读取和写入。这是使用 CODE 完成的。
- 现在我需要处理数据(主要是 MySQL)不阻塞套接字。
我想到了什么:
1:在两个不同的 PHP 线程中拥有 Socket 和 DB 连接。通信可以通过作业队列进行。我发现的实现基于 Geaman、Resque、BeanStalkD。然而,这些工作大多使用主线程和工作线程,因此没有双向通信。
2:将基本队列实现为全局队列?变量,从数据库线程读取作业,并将它们放回到另一个队列中。 (不知道这是否可能)
3: fork 子进程,如 here 中建议的那样。然后,我每次 fork 时都必须打开数据库连接,我认为我可以通过某种方式避免这种情况。另外,如何从子进程中调用send()?
硬部件:
1:需要双向通信:DB Thread必须将结果发送到Socket
2:应该适用于共享主机,例如没有 Gearman、Redis 安装。
另外:没有 PHP 技能
我在问什么?
需要什么才能不阻塞 Socket,什么不需要?
哪种方法适合我的需求,特别是当我的数据库线程必须将作业分配给套接字(“发送 xy”)时?
我在这里理解错了什么?
正如你所看到的,我缺乏基本的理解,非常感谢任何指导。非常感谢。
最佳答案
条条大路通罗马,但也许使用React PHP是适合您的解决方案。
它是一个事件驱动的、非阻塞的 PHP I/O 库。它可以满足您的要求,而且您无需深入了解细节即可完成工作。
关于php - 用于 GCM 和 MySQL 访问的 PHP 套接字是否需要多线程,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/28114336/