Клиент не получает опубликованные события с использованием демо-кода?
Я пробую Thruway, и у меня возникают проблемы с работой демо-кода.
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
Бег:
<?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, так как хочу только передавать сообщения с сервера на клиенты):
<?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
выводит на терминал следующее:
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!!!
были распечатаны в консоли браузера?
1 ответ
Я нашел сообщение в тикете в репозитории github, в котором говорится
клиент публикации не получит сообщение о событии по умолчанию.
Открытие другой вкладки с помощью JS привело к отправке сообщения на ранее открытую вкладку.
Тайна разгадана!