Skip to content

Latest commit

History

22 Commits

Folders and files

NameName
Last commit message
Last commit date

Repository files navigation

TcpSender

中文说明

Latest VersionTotal DownloadsGitHub license

Another TcpSender component for Hyperf.

Installation

  • Installation
composer require friendsofhyperf/tcp-sender

Usage

config/autoload/servers.php

'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,
],
]
],

多进程模型

TcpServer

<?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);
}
}

协程风格服务 单进程模型

TcpServer

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));
}
}

YourService or YourController

<?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}.",
];
}
}

Contact

License

MIT

About

[READ-ONLY] Another TcpSender component for Hyperf.

Resources

Security policy

Stars

3 stars

Watchers

2 watching

Forks

Releases

Sponsor this project

Packages

Used by

Contributors

Languages