【发布时间】: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