1

我正在创建一个带有服务器后端的移动应用程序,它将对用户进行身份验证并不断向他们发送更新,同时监听来自移动应用程序的发布数据。这些更新将特定于该人,从数据库中提取。

从我的研究看来,我应该使用 websocket。我熟悉 PHP,所以尝试过 Ratchet。我用 Ratchet 创建了一个简单的聊天脚本,它查询数据库 onMessage 并将数据发送到客户端。

我的问题是,websockets 适合这个吗?当服务器接收到连接时,它必须每 5 秒查询一次数据库并将更新的信息发送到应用程序。它必须侦听将更改数据库查询的消息。Ratchet 文档中的所有内容似乎都集中在主题订阅上,而不是单独对待每个客户,尽管我已经通过使用以下方法解决了这个问题:

$client = $this->clients[$from->resourceId];
$client->send("whatever_message"):

我是否通过使用 Ratchet 使事情复杂化了?或者我应该使用子进程来处理每个客户端?

对于一个模糊的问题,我很抱歉。我已经尽我所能进行了研究,但无法确定我是否走错了方向!感谢您的任何帮助。

4

1 回答 1

2

这是一个很好的公式。在保持套接字连接的同时从应用程序发送发布数据是一种良好的进程分布。但是 PHP 可能不是运行套接字服务器的最佳选择。

这样做的原因是 PHP 是一种单线程语言,它没有优雅的事件系统。

以 NodeJs 作为替代方案。它也是单线程的,但是您可以在套接字服务器上注册事件,从而允许软件在等待网络活动时运行其他控制进程。

但是,这并不限制您使用 javascript。仍然可以将工作从 NodeJs 应用程序委派给 PHP 进程(我仅将 NodeJs 用作示例,还有其他选项,例如 Java、Python 或良好的原生)。

要将工作转移到 PHP,您可以执行命令或使用作业服务器来启用同步和异步任务。

您可以结合以下一些资源来完成此操作:

http://nodejs.org/
http://socket.io/
http://gearman.org/
http://php.net/manual/en/book.gearman.php

如果您使用的是 Symfony:
https ://github.com/mmoreram/GearmanBundle

于 2014-09-03T13:13:16.613 回答