无法使WebSocketBundle订阅/发布工作。我遵循官方教程,设置错误?

时间:2017-01-12 21:09:07

标签: javascript php symfony websocket yaml

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

我设置了一个简单的客户端javascript,以便在捆绑的github上的官方教程之后使用WebSocketBundle。

当我访问我网站上的某个页面时,我正确连接到websocket服务器 当我想使用允许用户订阅频道的函数subscribe()和publish()时出现问题,当有人在此频道上发布内容时,订阅者会收到该消息。< / p>

在我的情况下,邮件不会被发送或接收,我真的不知道为什么因为没有显示任何重大错误,我试图尽可能准确地遵循这里的官方教程:
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

主题处理程序服务的部分内容(仅显示教程中给出的差异):
[/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 }

链接频道&amp; 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+"

[/应用/配置/ 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

这很长,因为我想要明确和清楚,有很多代码,但这是必要的,以便很好地理解整个事情。

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

2 个答案:

答案 0 :(得分:0)

您好我写这篇文章给你另一种方式来使用websocket和symfony我从来没有使用你的aproche但我使用本教程构建了许多应用程序 如果你发现自己陷入困境,可以使用它her

答案 1 :(得分:0)