【问题标题】:ClankBundle wont fire onSubscribeClankBundle 不会在订阅时触发
【发布时间】:2015-06-08 18:57:54
【问题描述】:

我正在尝试将 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.

services.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);
        })
    })

【问题讨论】:

    标签: sockets symfony autobahn ratchet


    【解决方案1】:

    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.
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2023-03-12
      • 2022-07-11
      • 2021-12-22
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2019-12-30
      • 2018-06-10
      相关资源
      最近更新 更多