我有一个专用的托管虚拟机,在其上托管我的 Web 应用程序,在 PHP (FCGI) 和 Apache 上运行。我用 PHP 构建了一个 REST API,基本上,Web 应用程序的所有内容都是端点。这包括应用程序中包含的聊天消息传递功能,因此使用轮询来模拟实时消息传递来实现。
我现在希望真正拥有一个实际的实时消息传递解决方案,但理想情况下使用尽可能多的用 PHP 编写的代码库,并尽可能减少添加的工作量。
所以我首先查看了 PHP 中的 websockets 解决方案,但我一直在阅读一些文章,说 PHP 并不是最适合 websockets 的。
所以我想到了以下架构:
POST /forward-messages
,采用一系列例如{message: string, id: int}
对象作为请求参数。当该端点收到请求时, message
会发送到当前与 ws 服务器连接的请求中提供的相应用户 id
。
POST /messages
端点)发送新消息时,一切都保持原样,此外:端点
POST /forward-messages
会在内部相应地触发。
这个设置有什么风险吗?
因此,您不必将大型代码从应用程序迁移到 NodeJS(您可以随时决定这样做,但不会被迫这样做),但您可以将中间件功能委托给 NodeJS,NodeJS 将成为“邮递员” " 在用户浏览器/应用程序和 PHP 服务器端之间。这样,您只需要实现一个轻量级中间件,该中间件将保持双工通道的启动和运行,从客户端接收一些命令,将它们转换为您的 PHP 应用程序可以理解的操作调用,发送请求(或执行命令 -行 PHP,无论你喜欢什么方法),获取 PHP 提供的答案,并通过 WebSocket 双工通道将其传输到客户端。