【问题标题】:Can't make WebSocketBundle subscribe/publish works. I followed official tutorial, bad setup?无法使 WebSocketBundle 订阅/发布工作。我按照官方教程,设置不好?
【发布时间】:2017-01-12 21:09:06
【问题描述】:

我正在使用 WebSocketBundle 开发一个 Symfony2 应用程序。
https://github.com/GeniusesOfSymfony/WebSocketBundle.
捆绑包的安装已成功完成。
因此,我使用简单的命令运行 websocket 服务器(本地端口 8080):“php app/console gos:websocket:server” 当我的 symfony 服务器正在运行时(本地端口 8000)。

我按照bundle github上的官方教程设置了一个简单的客户端javascript来使用WebSocketBundle。

当我来到我网站上的一个页面时,我已正确连接到 websocket 服务器。
当我想使用允许用户订阅频道,当有人在该频道发布内容时,订阅者会收到消息。

在我的情况下,消息没有发送或接收,我真的不知道为什么,因为没有显示相关的错误,我试图尽可能准确地遵循这里的官方教程:https://github.com/GeniusesOfSymfony/WebSocketBundle/blob/master/Resources/docs/TopicSetup.md
但是,不幸的是,我无法做到这一点。这就是我请求你帮助我的原因。

我在下面与您分享最相关的一段代码,以显示设置是如何进行的:

客户端 JavaScript:
[/web/js/own_scripts/gws_lobby.js]

var webSocket = WS.connect("ws://127.0.0.1:8080");

webSocket.on("socket/connect", function(session){
  //session is an Autobahn JS WAMP session.
  console.log("Successfully Connected!"); // I see this message

  session.subscribe("dcqtv/lobby/1", function(uri, payload){
      console.log("Message reçu : "+payload.msg);
  });

  session.publish("dcqtv/lobby/1", "testpublish");
});

// I should see "Message reçu : testpublish" in the console but that not happen

Topic Handler Service 的一部分(仅显示与教程中给出的不同之处):
[/src/AppBundle/DcqtvTopic.php]

  namespace AppBundle;
  class DcqtvTopic implements TopicInterface {
    ...
    public function getName(){
        return 'dcqtv.topic';
    }
  }

向 Symfony 注册服务:
[/src/AppBundle/Resources/config/services.yml]

services:
    dcqtv.topic:
        class: AppBundle\DcqtvTopic
        tags:
            - { name: gos_web_socket.topic }

使用 pubsub 路由器链接频道和主题(此处有 2 个文件):
[/src/AppBundle/Resources/config/pubsub/routing.yml]

dcqtv_topic:
    channel: dcqtv/lobby/{lobby_id}
    handler:
        callback: 'dcqtv.topic' #related to the getName() of your topic
    requirements:
        lobby_id:
            pattern: "\d+"

[/app/config/config.yml]

gos_web_socket:
    server:
        port: 8080        #The port the socket server will listen on
        host: 127.0.0.1   #The host ip to bind to
        router:
          resources:
            - @AppBundle/Resources/config/pubsub/routing.yml

这很长,因为我想要足够明确和清晰,有很多代码,但这是很好理解整个事情所必需的。

欢迎提问。
感谢您的关注。对不起,如果我的英语不好。

【问题讨论】:

    标签: javascript php symfony websocket yaml


    【解决方案1】:

    【讨论】:

    • 那是我忘记的事情......我真傻!非常感谢。
    【解决方案2】:

    嗨,我写这篇文章是为了给你另一种使用 websocket 和 symfony 的方法我从来没有使用过你的 aproche 但我使用这个教程构建了很多应用程序 如果你发现自己卡住了,你可以使用它her

    【讨论】:

    • 感谢您的回答,我的项目太远了,现在无法更改,但我会在以后的项目中尝试您的解决方案。
    猜你喜欢
    • 2019-07-24
    • 2016-10-06
    • 1970-01-01
    • 2020-10-11
    • 2013-03-13
    • 2021-06-05
    • 1970-01-01
    • 1970-01-01
    • 2011-05-13
    相关资源
    最近更新 更多