您好 这是我第一次使用套接字。我有多个客户端通过特定端口连接到我的套接字服务器。我想向特定客户端发送特定消息。我怎样才能做到这一点?。
我正在使用这个库
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));
如果只有一个客户端连接,此行将向客户端发送一条消息。但是如果连接了多个客户端,那么我如何向特定客户端发送消息?
在 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
,一旦客户端连接到您的服务器请求客户端 ID,例如:使用 JSON 进行轻松通信,发送此 JSON 消息
{"messageType":"request", "requestType": "identification"}
给客户。在客户端处理消息并发送此 JSON 消息
{"messageType":"response",
"body":{"userID":"123456", "accessToken":"ye5473rgfygf737trfeyg3rt764e"}}
回到服务器。在服务器端验证访问令牌并userID
从响应中检索。userID
是数据库中存储的唯一标识号,在注册到您的聊天站点期间分配给每个用户。
要知道发送消息的客户端,请使用此 JSON 消息格式
{"messageType":"message",
"from":"userID",
"body":"message here"}
修改以适合您的喜好。
本文收集自互联网,转载请注明来源。
如有侵权,请联系[email protected] 删除。
我来说两句