首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >客户端没有使用演示代码接收发布的事件?

客户端没有使用演示代码接收发布的事件?
EN

Stack Overflow用户
提问于 2015-03-02 18:55:48
回答 1查看 648关注 0票数 2

我正在尝试Thruway,很难让演示代码正常工作。

Javascript代码:

代码语言:javascript
复制
<script src="https://autobahn.s3.amazonaws.com/autobahnjs/latest/autobahn.js"></script>
<script>
//    var autobahn = require('autobahn');

    var connection = new autobahn.Connection({url: 'ws://dev.mysite.com:9090/', realm: 'realm1'});

    connection.onopen = function (session) {

        // 1) subscribe to a topic
        function onevent(args) {
            console.log("Event:", args[0]);
        }
        session.subscribe('com.myapp.hello', onevent);

        // 2) publish an event
        session.publish('com.myapp.hello', ['Hello, world!']);
    };

    connection.open();
</script>

我让SimpleWsServer.php运行:

代码语言:javascript
复制
<?php

require 'bootstrap.php';

use Thruway\Peer\Router;
use Thruway\Transport\RatchetTransportProvider;

$router = new Router();

$transportProvider = new RatchetTransportProvider("127.0.0.1", 9090);

$router->addTransportProvider($transportProvider);

$router->start();

我已经运行了SimpleClient.php (我删除了RPC代码,因为我只想将消息从服务器推送到客户端):

代码语言:javascript
复制
<?php

require 'bootstrap.php';

use Thruway\ClientSession;
use Thruway\Connection;

$onClose = function ($msg) {
    echo $msg;
};

$connection = new Connection(
    [
        "realm"   => 'realm1',
        "onClose" => $onClose,
        "url"     => 'ws://127.0.0.1:9090',
    ]
);

$connection->on(
    'open',
    function (ClientSession $session) {

        // 1) subscribe to a topic
        $onevent = function ($args) {
            echo "Event {$args[0]}\n";
        };
        $session->subscribe('com.myapp.hello', $onevent);

        // 2) publish an event
        $session->publish('com.myapp.hello', ['Hello, world from PHP!!!'], [], ["acknowledge" => true])->then(
            function () {
                echo "Publish Acknowledged!\n";
            },
            function ($error) {
                // publish failed
                echo "Publish Error {$error}\n";
            }
        );

//        // 3) register a procedure for remoting
//        $add2 = function ($args) {
//            return $args[0] + $args[1];
//        };
//        $session->register('com.myapp.add2', $add2);
//
//        // 4) call a remote procedure
//        $session->call('com.myapp.add2', [2, 3])->then(
//            function ($res) {
//                echo "Result: {$res}\n";
//            },
//            function ($error) {
//                echo "Call Error: {$error}\n";
//            }
//        );
    }

);

$connection->open();

在我看来,演示代码在订阅后将消息Hello, world from PHP!!!发送给客户端,但我在浏览器的控制台中没有看到消息。

我知道客户端正在连接到服务器,因为SimpleClient.php将以下内容输出到终端:

代码语言:javascript
复制
2015-03-02T19:47:24.5464800 debug      [Thruway\Transport\PawlTransportProvider 13800] Received: [36,1574620859,33562629,{},["Hello, world!"]]
2015-03-02T19:47:24.5470880 debug      [Thruway\Peer\Client 13800] Client onMessage: [Thruway\Message\EventMessage]
Event Hello, world!

我是遗漏了什么,还是应该在浏览器控制台中打印Hello, world from PHP!!!

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2015-03-03 01:12:30

我在github回购公司的一张罚单上找到了一个帖子

默认情况下,发布客户端不会接收事件消息。

使用JS打开另一个选项卡将导致消息被发送到先前打开的选项卡。

谜团解开了!

票数 3
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/28817366

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档