将node.js模块添加到PHP Apache应用程序中以通过websockets进行实时通信?

问题描述 投票:0回答:1

我有一个专用的托管虚拟机,在其上托管我的 Web 应用程序,在 PHP (FCGI) 和 Apache 上运行。我用 PHP 构建了一个 REST API,基本上,Web 应用程序的所有内容都是端点。这包括应用程序中包含的聊天消息传递功能,因此使用轮询来模拟实时消息传递来实现。

我现在希望真正拥有一个实际的实时消息传递解决方案,但理想情况下使用尽可能多的用 PHP 编写的代码库,并尽可能减少添加的工作量。

所以我首先查看了 PHP 中的 websockets 解决方案,但我一直在阅读一些文章,说 PHP 并不是最适合 websockets 的。

所以我想到了以下架构:

  • 在我的虚拟机上安装额外的 node.js 目录
  • 在该目录中,设置一个负责处理 ws 连接的 websocket 服务器
  • 当客户端成功登录后,与Websocket服务器建立新的连接。到目前为止,整个应用程序流量仍然通过 REST API。 ws连接专门用于将收到的消息实时转发到对应的客户端。
  • 在node.js服务器上创建一个端点,例如
    POST /forward-messages
    ,采用一系列例如
    {message: string, id: int}
    对象作为请求参数。当该端点收到请求时,
    message
    会发送到当前与 ws 服务器连接的请求中提供的相应用户
    id
  • 当通过 REST API(例如
  • POST /messages
     端点)发送新消息时,一切都保持原样,此外:端点 
    POST /forward-messages
     会在内部相应地触发。
我正在考虑这个解决方案,因为消息传递系统设置与应用程序的其他组件紧密耦合,因此在 Node.js 中重写它的整个逻辑将花费大量时间,并且至少目前不是一个选项.

这个设置有什么风险吗?

php node.js websocket
1个回答
0
投票
如果 PHP 对于 WebSockets 对您来说不可行,那么您可以使用您选择的技术实现中间件,NodeJS 似乎就是这样。中间件也不包含任何数据处理,它只会处理与用户的浏览器/应用程序的双工 WebSocket 通信,并将与浏览器/应用程序交互期间的事件解析为对 PHP 应用程序的调用。

因此,您不必将大型代码从应用程序迁移到 NodeJS(您可以随时决定这样做,但不会被迫这样做),但您可以将中间件功能委托给 NodeJS,NodeJS 将成为“邮递员” " 在用户浏览器/应用程序和 PHP 服务器端之间。这样,您只需要实现一个轻量级中间件,该中间件将保持双工通道的启动和运行,从客户端接收一些命令,将它们转换为您的 PHP 应用程序可以理解的操作调用,发送请求(或执行命令 -行 PHP,无论你喜欢什么方法),获取 PHP 提供的答案,并通过 WebSocket 双工通道将其传输到客户端。

© www.soinside.com 2019 - 2024. All rights reserved.