Как я могу отправить сообщение конкретному клиенту, подключенному через сокет - PullRequest
0 голосов
/ 14 мая 2018

Здравствуйте. Я впервые работаю с сокетами.У меня есть несколько клиентов, которые подключаются к моему серверу сокетов через определенный порт.Я хочу отправить конкретное сообщение конкретному клиенту.Как мне это сделать?.

Я использую эту библиотеку

https://github.com/navarr/Sockets

Это код

<?php

use Navarr\Socket\Socket;
use Navarr\Socket\Server;

class EchoServer extends Server
{
    const DEFAULT_PORT = 7;

    public function __construct($ip = null, $port = self::DEFAULT_PORT)
    {
        parent::__construct($ip, $port);
        $this->addHook(Server::HOOK_CONNECT, array($this, 'onConnect'));
        $this->addHook(Server::HOOK_INPUT, array($this, 'onInput'));
        $this->addHook(Server::HOOK_DISCONNECT, array($this, 'onDisconnect'));
        $this->run();
    }

    public function onConnect(Server $server, Socket $client, $message)
    {
        echo 'Connection Established',"\n";
    }

    public function onInput(Server $server, Socket $client, $message)
    {
        echo 'Received "',$message,'"',"\n";
        $client->write($message, strlen($message));
    }

    public function onDisconnect(Server $server, Socket $client, $message)
    {
        echo 'Disconnection',"\n";
    }
}

$server = new EchoServer('0.0.0.0');

Эта строка $client->write($message, strlen($message));отправит сообщение клиенту, если подключен только один клиент.но если подключено несколько клиентов, то как я могу отправить сообщение конкретному клиенту?

1 Ответ

0 голосов
/ 14 мая 2018

Добавьте этот код в функцию onConnect.

//declare this as global inside EchoServer class so that you can access this outside onConnect function
$connected_clients["userID"] = $client; //use unique id for key

Затем, чтобы отправить сообщение, используйте userID для доступа к нужному клиенту:

$connected_clients["userID"]->write($message, strlen($message));

Чтобы получить userID, один разклиент подключается к вашему серверу для запроса идентификатора клиента, например: используйте JSON для упрощения связи, отправьте это сообщение JSON

{"messageType":"request", "requestType": "identification"} 

клиенту.На стороне клиента обработайте сообщение и отправьте это сообщение JSON

{"messageType":"response", 
 "body":{"userID":"123456", "accessToken":"ye5473rgfygf737trfeyg3rt764e"}} 

обратно на сервер.На стороне сервера проверьте токен доступа и получите userID из ответа.userID - это хранилище уникальных идентификационных номеров в базе данных, которое присваивается каждому пользователю во время регистрации на вашем сайте чата.

Чтобы узнать клиента, отправляющего сообщение, используйте этот формат сообщения JSON

{"messageType":"message", 
 "from":"userID", 
 "body":"message here"}

Изменить в соответствии с вашими предпочтениями.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...