55 lines
2.1 KiB
PHP
55 lines
2.1 KiB
PHP
<?php
|
||
/*
|
||
* @files.saveConflictResolution: overwriteFileOnDisk
|
||
* @Author: llbjj
|
||
* @Date: 2022-07-05 08:26:57
|
||
* @LastEditTime: 2022-07-05 14:16:46
|
||
* @LastEditors: llbjj
|
||
* @Description:
|
||
* @FilePath: /RemoteWorking/module/Application/src/Command/Swoole/Server/SwItemTipCommand.php
|
||
*/
|
||
namespace Application\Command\Swoole\Server;
|
||
|
||
use Application\Command\BasicCommand;
|
||
use Symfony\Component\Console\Input\InputInterface;
|
||
use Symfony\Component\Console\Output\OutputInterface;
|
||
|
||
class SwItemTipCommand extends BasicCommand {
|
||
protected function execute(InputInterface $input, OutputInterface $output)
|
||
{
|
||
// 开启websock服务
|
||
$wsSv = new \Swoole\WebSocket\Server('0.0.0.0', 9590);
|
||
|
||
// 监听WebSocket连接打开事件
|
||
$wsSv->on('open', function(\Swoole\WebSocket\Server $server, $request) use($output) {
|
||
// $output->writeln("server: handshake success with fd{$request->fd}".PHP_EOL);
|
||
});
|
||
|
||
// 监听客户端消息事件
|
||
$wsSv->on('message', function(\Swoole\WebSocket\Server $server, $frame) use($output) {
|
||
$output->writeln("receive from {$frame->fd}:{$frame->data},opcode:{$frame->opcode},fin:{$frame->finish}".PHP_EOL);
|
||
});
|
||
|
||
// 利用swoole的定时器,定时请求数据实时推送到客户端;timer的简单用法
|
||
$addProcess = new \Swoole\Process( function($process) use($wsSv, $output) {
|
||
\Swoole\Timer::tick(5000, function (int $timer_id, $wsSv) {
|
||
foreach ($wsSv->connections as $fd){
|
||
// 根据实际情况获取数据,发送给客户端(目前只是测试数据)
|
||
$wsSv->push($fd, $fd.":项目总数量:".$this->LocalService()->itemInfo->getCount().' 个 '.time());
|
||
}
|
||
}, $wsSv);
|
||
});
|
||
$wsSv->addProcess($addProcess);
|
||
|
||
|
||
// 监听客户端断开链接
|
||
$wsSv->on('close', function($server, $fd) use($output) {
|
||
$output->writeln("client {$fd} closed".PHP_EOL);
|
||
});
|
||
|
||
// 启动websock服务
|
||
$wsSv->start();
|
||
|
||
return 0;
|
||
}
|
||
} |