2
투표 응용 프로그램에 websocket을 사용하고 싶습니다. 하나는 채팅 채널이고 다른 하나는 명령 채널이며 질문, 사용 가능한 답변, 카운트 다운 등에 관한 정보는 여행 할 것입니다.Thruway를 사용하여 서버 측에서 메시지를 구문 분석하는 방법
클라이언트 측에서는 Autobahn|JS을 라이브러리로 사용합니다. 내 두 채널을 쉽게 구독 할 수 있습니다 (서버 로그에서 볼 수 있습니다).
서버 측에서는 WAMP v2를 준수하기 때문에 Thruway을 사용합니다.
내 문제 : 서버 측에서 메시지를 연결하여 각 항목을 방송 할 수있는 방법을 모르겠습니다. 쉽게 볼 수 있지만 어떤 해결책을 찾을 수 있습니다.
JS 클라이언트
var ws;
var connection = new autobahn.Connection({
url: 'ws://dev.test.com:8080/',
realm: 'com.test.dev'
});
connection.onopen = function (session) {
ws = session;
function onevent(args) {
console.log("Event:", args[0]);
}
session.subscribe('chat.test', onevent);
session.subscribe('cmd.test', onevent);
};
connection.open();
그냥 후, 나는 청취자를에 추가
나는
일부 코드가 ... 그것은 InternalClient를 사용하여,하지만 난 정말 확실하지 않다 생각 채팅 상자 :
$('#message').on('keydown', function(event) {
var keycode = event.keyCode || event.which;
if(keycode == '13') {
event.preventDefault();
ws.publish('chat.test', [{token: token, message: $('#message').val()}]);
$('#message').val('');
}
});
PHP 서버
<?php
require 'vendor/autoload.php';
use Thruway\Peer\Router;
use Thruway\Transport\RatchetTransportProvider;
class TestInternalClient extends Thruway\Peer\Client {
public function __construct() {
parent::__construct('com.test.dev');
}
public function onSessionStart($session, $transport) {
echo "--------------- Hello from InternalClient ------------\n";
$session->subscribe('chat.test', [$this, 'chat']);
}
public function chat($args, $kwArgs, $options) {
// Decode chat message here? How to broadcast them?
}
}
$router = new Router();
$router->addTransportProvider(new RatchetTransportProvider("0.0.0.0", 8080));
$router->addInternalClient(new TestInternalClient());
$router->start();
서버 로그
[email protected]:~/dev/wp-content/websockets$ php server.php
2017-01-03T17:48:19.4812750 notice Changing PHP precision from 14 to 16
2017-01-03T17:48:19.4831340 debug [Thruway\Peer\Router 21425] New router created
2017-01-03T17:48:19.4838930 info [TestInternalClient 21425] New client created
2017-01-03T17:48:19.4842930 info [Thruway\Peer\Router 21425] Starting router
2017-01-03T17:48:19.4874870 info [Thruway\Transport\RatchetTransportProvider 21425] Websocket listening on 0.0.0.0:8080
2017-01-03T17:48:19.4911550 info [Thruway\RealmManager 21425] Got prehello...
2017-01-03T17:48:19.4912050 debug [Thruway\RealmManager 21425] Creating new realm "com.test.dev"
2017-01-03T17:48:19.4928900 debug [Thruway\RealmManager 21425] Adding realm "com.test.dev"
2017-01-03T17:48:19.4943690 debug [TestInternalClient 21425] Client onMessage: [Thruway\Message\WelcomeMessage]
2017-01-03T17:48:19.4944080 info [TestInternalClient 21425] We have been welcomed...
--------------- Hello from InternalClient ------------
2017-01-03T17:48:19.4955960 debug [Thruway\Subscription\SubscriptionGroup 21425] Added subscription to "exact":"chat.test"
2017-01-03T17:48:19.4958000 debug [TestInternalClient 21425] Client onMessage: [Thruway\Message\SubscribedMessage]
2017-01-03T17:48:19.4965720 info [Thruway\Peer\Router 21425] Starting loop
2017-01-03T17:48:25.8358310 debug [Thruway\Transport\RatchetTransportProvider 21425] RatchetTransportProvider::onOpen
2017-01-03T17:48:25.9890380 debug [Thruway\Transport\RatchetTransportProvider 21425] onMessage: ([1,"com.test.dev",{"roles":{"caller":{"features":{"caller_identification":true,"progressive_call_results":true}},"callee":{"features":{"caller_identification":true,"pattern_based_registration":true,"shared_registration":true,"progressive_call_results":true,"registration_revocation":true}},"publisher":{"features":{"publisher_identification":true,"subscriber_blackwhite_listing":true,"publisher_exclusion":true}},"subscriber":{"features":{"publisher_identification":true,"pattern_based_subscription":true,"subscription_revocation":true}}}}])
2017-01-03T17:48:25.9895580 info [Thruway\RealmManager 21425] Got prehello...
2017-01-03T17:48:26.0515670 debug [Thruway\Transport\RatchetTransportProvider 21425] onMessage: ([32,2358366231642639,{},"chat.test"])
2017-01-03T17:48:26.0517410 debug [Thruway\Subscription\SubscriptionGroup 21425] Added subscription to "exact":"chat.test"
2017-01-03T17:48:26.0519070 debug [Thruway\Transport\RatchetTransportProvider 21425] onMessage: ([32,8132914407728460,{},"cmd.test"])
2017-01-03T17:48:26.0520030 debug [Thruway\Subscription\SubscriptionGroup 21425] Added subscription to "exact":"cmd.test"
2017-01-03T17:48:34.0115900 debug [Thruway\Transport\RatchetTransportProvider 21425] onMessage: ([16,3263467437225103,{},"chat.test",[{"token":"6b28af4056d650480e726e33986a2e790e34abb1","message":"Write from my chatbox"}]])
2017-01-03T17:48:34.0121500 debug [TestInternalClient 21425] Client onMessage: [Thruway\Message\EventMessage]
당신이 어떤 생각을 가지고 있다면 ... 감사합니다! :)
답장을 보내 주셔서 감사합니다. 정적 채널 이름과 함께 작동합니다. 그러나 동적 인 이름으로 여러 개의 대화방을 관리하고 싶다면 어떻게해야합니까? 로그에 내 클라이언트가 채널을 구독하는 경우를 볼 수 있습니다. 내부 클라이언트가 메시지를 재생하기 위해 자동으로 구독하게하고 싶습니다. 이렇게 할 수있는 방법이 있습니까? – Guillaume
@Guillaume - 나는 모든 주제에 동시에 가입하는 것을 추가했습니다. 이것이 바로이 문제를 해결하는 한 가지 방법입니다. – mbonneau
고마워요, 이것은 매력처럼 작동합니다! 당신의 도움 없이는 찾을 수 없었습니다.) – Guillaume