Лучшая практика для нескольких методов подписки в React / Ratchet / zmqPhp

Кемеровские программисты php общаются здесь
Ответить
Anonymous
 Лучшая практика для нескольких методов подписки в React / Ratchet / zmq

Сообщение Anonymous »

Я пытаюсь создать небольшой вариант использования WebSocket в реальном времени, где пользователи могут войти в систему и видеть, как все остальные пользователи вошли в систему, получать уведомления, когда входит новый пользователь, или существующий пользователь входит в систему. < /p>

Для этого сценария я использую zmq push -розетку в моем Usercontroller, когда пользователь входит в систему или входит в систему. < /p>

userconstroller < /strong> < /p>

Код: Выделить всё

public function login() {

//... here is the auth code, model call etc...

$aUserData = array();// user data comes from the database with username, logintime, etc....

$context = new \ZMQContext();
$oSocket = $context->getSocket(\ZMQ::SOCKET_PUSH, 'USER_LOGIN_PUSHER'); // use persistent_id
if($oSocket instanceof \ZMQSocket) {

$oSocket->connect("tcp://127.0.0.1:5555"); //
$oSocket->send(json_encode($aUserData));
}
}

public function logout() {
//... here is the logout code, model call etc ....

$aUserData = array();// user data comes from the SESSION with username, logintime, etc....

$context = new \ZMQContext();
$oSocket = $context->getSocket(\ZMQ::SOCKET_PUSH, 'USER_LOGOUT_PUSHER'); // use persistent_id
if($oSocket instanceof \ZMQSocket) {

$oSocket->connect("tcp://127.0.0.1:5555"); //
$oSocket->send(json_encode($aUserData));
}
}
Then i've got a Pusher class like in the Ratchet docs: link

In this class there are two methods: onUserLogin[/b] and onUserLogout and of course all the other stuff like


onSubScribe, OnoPen, OnPublish < /p>
< /blockquote>

userInformationPusher < /strong> < /p>

Код: Выделить всё

 public function onUserLogin($aUserData) {
//var_dump("onUserLogin");
$sUserData = json_decode($aUserData, true);

$oTopic = $this->subscribedTopics["user_login"];

if($oTopic instanceof Topic) {
$oTopic->broadcast($sUserData);
} else {
return;
}
}

public function onUserLogout($aUserData) {
//var_dump("onUserLogout");
$entryData = json_decode($aUserData, true);

$oTopic = $this->subscribedTopics["user_logout"];

if($oTopic instanceof Topic) {
$oTopic->broadcast($entryData);
} else {
return;
}
}
Последняя часть - это Wampserver/Wsserver/httpserver с циклом, который слушает входящие соединения. Также есть мой розетка ZMQ < /p>

ratchetserverconsole < /strong> < /p>

public function start_server() {

$oPusher = new UserInformationPusher();

$oLoop = \React\EventLoop\Factory::create();
$oZMQContext = new \React\ZMQ\Context($oLoop);
$oPullSocket = $oZMQContext->getSocket(\ZMQ::SOCKET_PULL);

$oPullSocket->bind('tcp://127.0.0.1:5555'); // Binding to 127.0.0.1 means the only client that can connect is itself
$oPullSocket->on('message', array($oPusher, 'onUserLogin'));
$oPullSocket->on('message', array($oPusher, 'onUserLogout'));

$oMemcache = new \Memcache();
$oMemcache->connect('127.0.0.1', 11211);
$oMemcacheHandler = new Handler\MemcacheSessionHandler($oMemcache);

$oSession = new SessionProvider(
new \Ratchet\Wamp\WampServer(
$oPusher
),
$oMemcacheHandler
);

//$this->Output->info("Server start initiation with memcache!...");
$webSock = new \React\Socket\Server($oLoop);
$webSock->listen(8080, '0.0.0.0'); // Binding to 0.0.0.0 means remotes can connect
$oServer = new \Ratchet\Server\IoServer(
new \Ratchet\Http\HttpServer(
new \Ratchet\WebSocket\WsServer(
$oSession
)
),
$webSock
);
$this->Output->info("Server started ");
$oLoop->run();

}
< /code>

В этом примере вызов из login () или logout () всегда называют оба метода (OnuSerlogin и OnuserLogout).
Я не смог найти некоторые документы, которые описывают, какие события я могу использовать в на ($ vallable $ wrenter), который можно найти в методе Link /Sceled, что есть для Link /Знание? Usercontroller был уволен? < /p>


Я мог бы добавить некоторую информацию в $ suserdata в контроллере и проверить это в толкателе < /li>
Я мог бы связать другой сокет с другим портом (например, 5554 для притяжения и натолкнувшего это?>

Подробнее здесь: https://stackoverflow.com/questions/284 ... atchet-zmq
Ответить

Быстрый ответ

Изменение регистра текста: 
Смайлики
:) :( :oops: :roll: :wink: :muza: :clever: :sorry: :angel: :read: *x)
Ещё смайлики…
   
К этому ответу прикреплено по крайней мере одно вложение.

Если вы не хотите добавлять вложения, оставьте поля пустыми.

Максимально разрешённый размер вложения: 15 МБ.

Вернуться в «Php»