Another TcpSender component for Hyperf.
- Installation
composer require friendsofhyperf/tcp-sender'servers' => [
[
'name' => 'tcp',
'type' => Server::SERVER_BASE,
'host' => '0.0.0.0',
'port' => 9401,
'sock_type' => SWOOLE_SOCK_TCP,
'callbacks' => [
Event::ON_CONNECT => [TcpServer::class,'onConnect'],
Event::ON_CLOSE => [TcpServer::class,'onClose'],
Event::ON_RECEIVE => [TcpServer::class,'onReceive'],
],
'options' => [
// Whether to enable request lifecycle event'enable_request_lifecycle' => false,
],
]
],<?phpnamespaceApp;
useHyperf\Contract\OnCloseInterface;
useHyperf\Contract\OnReceiveInterface;
useFriendsOfHyperf\TcpSender\Sender;
useSwoole\Server;
class TcpServer implements OnCloseInterface,OnReceiveInterface
{
publicfunction__construct(privateSender$sender)
{
}
/** * @param Server $server */publicfunctiononConnect($server, $fd, $reactorId): void
{
$server->send($fd, sprintf('Client %s connected.'.PHP_EOL, $fd));
}
publicfunctiononClose($server, int$fd, int$reactorId): void
{
$server->send($fd, sprintf('Client %s closed.'.PHP_EOL, $fd));
}
publicfunctiononReceive($server, int$fd, int$reactorId, string$data): void
{
$server->send($fd, sprintf('Client %s send: %s'.PHP_EOL, $fd, $data));
var_dump($data);
}
}namespaceApp;
useHyperf\Contract\OnReceiveInterface;
useFriendsOfHyperf\TcpSender\Sender;
useSwoole\Coroutine\Server\Connection;
useSwoole\Server;
class TcpServer implements OnReceiveInterface
{
publicfunction__construct(privateSender$sender)
{
}
publicfunctiononConnect(Connection$connection, $fd): void
{
// 设置 fd 和 connection 的映射关系$this->sender->setResponse($fd,$connection);
$connection->send(sprintf('Client %s connected.'.PHP_EOL, $fd));
}
publicfunctiononClose($connection, int$fd): void
{
// 删除 fd 和 connection 的映射关系$this->sender->setResponse($fd,null);
}
publicfunctiononReceive($server, int$fd, int$reactorId, string$data): void
{
$server->send($fd, sprintf('Client %s send: %s'.PHP_EOL, $fd, $data));
}
}<?phpdeclare(strict_types=1);
namespaceApp\Controller;
useFriendsOfHyperf\TcpSender\Sender;
class IndexController extends AbstractController
{
publicfunction__construct(privateSender$sender)
{
}
publicfunctionindex()
{
// 向指定的fd发送消息$this->sender->send(1, 'Hello Hyperf.');
$user = $this->request->input('user', 'Hyperf');
$method = $this->request->getMethod();
return [
'method' => $method,
'message' => "Hello {$user}.",
];
}
}