【问题标题】:Symfony Bundle for allowing users to message each otherSymfony Bundle 允许用户互相发送消息
【发布时间】:2018-10-04 18:09:31
【问题描述】:

我正在开发一个网络应用程序,该应用程序需要能够允许用户相互发送消息。它应该这样工作,当用户在线并发送消息时,如果收件人在线,他们将在屏幕上收到通知并能够知道他们已收到消息(无需他们刷新页面)

消息应该是对话线程的一部分,而不是电子邮件(尽管通知未登录用户的一种方法是通过电子邮件发送给他们)

是否有任何捆绑包可以做这种事情,或者我需要 Symfony 和 JS 的组合来允许用户网页的实时更新?

我看过 rabbitMQ 和 FOSmessageBundle 之类的东西,但我还没有弄清楚它们如何让我将用户通知返回到打开的用户会话。

感谢您的想法或指导。

【问题讨论】:

    标签: symfony notifications rabbitmq


    【解决方案1】:

    实时消息交换的首选技术是Websocket

    请让我介绍一下 websocket 的基本工作流程。

    我们以 foo 和 bar 作为示例用户

    聊天的工作流程

    • foo 建立到 websocket 的连接 server
    • bar 建立到 websocket 的连接 server
    • foo 在连接中发送hello 消息
    • server收到消息并广播到bar's连接
    • Bar 接收来自连接负载的消息并显示它

    客户端是javascript,恕我直言,你没有选择

    对于服务器端,您可以在 PHP 中执行此操作

    我会向您推荐一个不太知名但不错的库,名为 Woketo

    nodejs环境比较常见,主要是nodejs在异步的东西上比php好。每个进程使用的内存也更少

    欢迎提问:)

    【讨论】:

      【解决方案2】:

      我最近构建了这样的功能,它非常简单。我使用了这个捆绑包,它具有发布/订阅功能并让你的 websockets 正常工作。您自己唯一需要做的就是在数据库中记录消息(如果您愿意的话)并使每个 pub/sub 指向彼此,以便消息从一个用户传递到另一个用户。

      GOS RATCHET BUNDLE

      2020 年更新:

      有一个很棒的自托管替代 pub-sub 与 Symfony 原生捆绑:Mercure

      【讨论】:

      • 啊,我想我之前可能看过这个,但我不知道如何理解它。
      • @MB。文档中有工作示例,如果您在某处阻塞,可以在这里用您不理解的代码询问它。
      • 谢谢你。我的高级开发人员推动我使用 Cometchat,因为他对 FOS 和 GOS 捆绑包不够自信,但在审查了他们的计划和定价之后,我认为像我们这样的小型初创公司买不起。还有一些评价不好。遗憾的是,没有可供开发人员放心使用的良好自托管聊天服务。如果有人知道任何服务,请告诉我。
      • 我宁愿推荐美居。在尝试了这两种方法后,我宁愿在单独的容器中运行一个实例,并且您可以拥有任意数量的应用程序来桥接同一个实例
      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2017-05-13
      • 2022-08-11
      • 2021-04-19
      • 2020-05-16
      • 1970-01-01
      • 2016-10-25
      • 2018-08-16
      相关资源
      最近更新 更多