php - 用于 GCM 和 MySQL 访问的 PHP 套接字是否需要多线程

标签 php mysql multithreading sockets google-cloud-messaging

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/

相关文章:

php - 尝试更新 MySQL 表时出错

php - 文本导致 CSS 放置问题

php - MySQL:SHOW TABLES 只返回第一个表

php - 如何解析select mysql查询得到的Json数据?

mysql - 检查日期是否在日期范围内

mysql - 如何在 mysql 非常大的表中更快地分组?

c - flock() 的范围是什么?

objective-c - 从 C++ 循环启动 Cocoa GUI 并传递引用

php - 计算数组中连续值的数量

c# - 使用线程运行 webservice 方法