gpt4 book ai didi

sockets - ClankBundle 不会触发订阅

转载 作者:行者123 更新时间:2023-12-04 16:14:28 25 4
gpt4 key购买 nike

我正在尝试将 ClankBundle 实现到 Symfony2 项目。
当我创建一个从 js 调用的函数时,它运行良好,但当我尝试在 Symfony2 上创建 onSubscribe 函数时,它不会触发并且我没有收到错误。
顺便说一句,此检查是在 Ubuntu 上运行的本地环境中进行的
这是我的代码
config.yml -

clank:
web_socket_server:
port: 8080 #The port the socket server will listen on
host: 127.0.0.1 #(optional) The host ip to bind to
rpc:
-
name: "acme" #Important! this is the topic namespace used to match to this service!
service: "acme_hello.topic_sample_service" #The service id.
-
name: "sample" #Important! this is the network namespace used to match calls to this service!
service: "my_bundle.rpc_sample_service" #The service id.

服务.yml -
  my_bundle.rpc_sample_service:
class: MyBundle\RPC\SocketService

acme_hello.topic_sample_service:
class: MyBundle\Topic\MyTopic

MyTopic.php -
<?php

namespace MyBundle\Topic;

use JDare\ClankBundle\Topic\TopicInterface;
use Ratchet\ConnectionInterface as Conn;

class MyTopic implements TopicInterface
{

/**
* This will receive any Subscription requests for this topic.
*
* @param \Ratchet\ConnectionInterface $conn
* @param $topic
* @return void
*/
public function onSubscribe(Conn $conn, $topic)
{
file_put_contents('/deleteme.txt', 'onSubscribe called \n', FILE_APPEND);
//this will broadcast the message to ALL subscribers of this topic.
$topic->broadcast($conn->resourceId . " has joined " . $topic->getId());
}

/**
* This will receive any UnSubscription requests for this topic.
*
* @param \Ratchet\ConnectionInterface $conn
* @param $topic
* @return void
*/
public function onUnSubscribe(Conn $conn, $topic)
{
file_put_contents('/deleteme.txt', 'onUnSubscribe called \n', FILE_APPEND);
//this will broadcast the message to ALL subscribers of this topic.
$topic->broadcast($conn->resourceId . " has left " . $topic->getId());
}


/**
* This will receive any Publish requests for this topic.
*
* @param \Ratchet\ConnectionInterface $conn
* @param $topic
* @param $event
* @param array $exclude
* @param array $eligible
* @return mixed|void
*/
public function onPublish(Conn $conn, $topic, $event, array $exclude, array $eligible)
{
file_put_contents('/deleteme.txt', 'onPublish called \n', FILE_APPEND);
/*
$topic->getId() will contain the FULL requested uri, so you can proceed based on that

e.g.

if ($topic->getId() == "acme/channel/shout")
//shout something to all subs.
*/


$topic->broadcast(array(
"sender" => $conn->resourceId,
"topic" => $topic->getId(),
"event" => $event
));
}

}

js代码——
var mysess;
$(document).ready(function(){
var myClank = Clank.connect("ws://localhost:8080");

myClank.on("socket/connect", function(session){
//session is an Autobahn JS WAMP session.
mysess = session;
console.log("Successfully Connected!");
//the callback function in "subscribe" is called everytime an event is published in that channel.
console.log('before subscribe');
session.subscribe("acme/channel", function(uri, payload){
console.log("Received message", payload.msg);
});
console.log('afte subscribe')
session.publish('im publishing from js');
mysess.publish("acme/channel", {msg: "This is a message!"});
// mysess.unsubscribe("acme/channel");
// mysess.publish("acme/channel", {msg: "I won't see this"});

})

myClank.on("socket/disconnect", function(error){
//error provides us with some insight into the disconnection: error.reason and error.code
console.log("Disconnected for " + error.reason + " with code " + error.code);
})
})

最佳答案

topic 和 rpc 是不同的配置条目:

 topic:
-
name: "acme" #Important! this is the topic namespace used to match to this service!
service: "acme_hello.topic_sample_service" #The service id.
rpc:
-
name: "sample" #Important! this is the network namespace used to match calls to this service!
service: "my_bundle.rpc_sample_service" #The service id.

关于sockets - ClankBundle 不会触发订阅,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/30716987/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com