我正在开发一个需要允许用户互相发送消息的Web应用程序。 它应该工作,当用户在线并且他们发送消息时,如果收件人在线,他们将在屏幕上收到通知并能够知道他们已收到消息(他们不必进行页面刷新(
消息应该是对话线程的一部分,而不是电子邮件(尽管通知未登录用户的一种方法是向他们发送电子邮件(
是否有任何捆绑包可以做这种事情,或者我需要Symfony和JS的组合来允许用户网页的实时更新?
我已经查看了像 rabbitMQ 和 FOSmessageBundle 这样的东西,但我还没有弄清楚它们如何让我将用户通知返回到打开的用户会话。
感谢想法或指导。
实时消息交换的首选技术是Websocket
请让我介绍一下websocket的基本工作流程。
让我们以foo和bar为例
聊天的工作流程
foo
建立与 Websocketserver
的连接bar
建立与 Websocketserver
的连接foo
在连接中发送hello
消息server
收到消息并广播到bar's
连接- 酒吧从连接有效负载接收消息并显示它
客户端是javascript,恕我直言,你没有选择
对于服务器端,您可以在PHP中执行此操作
我会推荐你一个不太出名但很好的图书馆,叫做Woketo。
节点JS环境更常见,主要是因为节点js比PHP更好。每个进程使用的内存也更少
请随时询问:)
我最近构建了这样的功能,它非常简单。我使用了这个捆绑包来执行发布/订阅功能并让您的 websocket 正常工作。您自己唯一要做的就是在数据库中记录消息(如果您愿意(,并使每个发布/订阅相互指向,以便消息从一个用户传递到另一个用户。
高斯棘轮束
2020年更新:
有一个很棒的自托管替代pub-sub与Symfony原生捆绑在一起:Mercure