swoole|swoole websocket_task
2,//worker process num
'task_worker_num' => 2,//worker process num
'document_root' => '/home/season/Desktop/swoole/demo/temp',
'enable_static_handler' => true,
];
public function __construct()
{
$this->sw = new swoole_websocket_server(self::HOST, self::PORT);
$this->sw->set($this->set);
$this->sw->on('open', [$this, 'onOpen']);
$this->sw->on('message', [$this, 'onMessage']);
$this->sw->on('task', [$this, 'onTask']);
$this->sw->on('finish', [$this, 'onFinish']);
$this->sw->on('close', [$this, 'onClose']);
$this->sw->start();
}//监听websocket 打开/连接 事件
//当WebSocket客户端与服务器建立连接并完成握手后会回调此方法。
public function onOpen($server, $request)
{
echo "服务器: 握手成功,fd{$request->fd}\n";
}//当WebSocket客户端与服务器建立连接并完成握手后会回调此函数。
public function onMessage($server, $frame)
{
echo "收到 {$frame->fd}:{$frame->data},操作码:{$frame->opcode},完成:{$frame->finish}\n";
$data = https://www.it610.com/article/['task' => 1,
'fd' => $frame->fd,
];
$server->task($data);
$redisClient = new Swoole\Redis();
$redisClient->connect('127.0.0.1',6379,function (swoole_redis $swoole_redis ,$result)use ($frame) {
$swoole_redis->set($frame->fd,true,function (swoole_redis $swoole_redis,$result){});
$swoole_redis->keys('*',function (swoole_redis $swoole_redis,$result) use($frame){
print_r($result);
foreach ($result as $fd) {
$this->sw->push($fd, '用户'.$frame->fd.'已登录');
}
});
});
}//任务
public function onTask($server, $task_id, $src_worker_id, $data)
{
//print_r($data);
$data['msg'] = '任务完成';
sleep(10);
return json_encode($data);
}/**
* @param $server
* @param $task_id 任务的ID
* @param $data onTask return返回的数据
*/
public function onFinish($server, $task_id, $data)
{
$data = https://www.it610.com/article/json_decode($data);
//echo"任务编号:{$task_id},{$data->msg}\n";
$server->push($data->fd, "任务编号:{$task_id},{$data->msg}\n");
}//关闭时出发回调
public function onClose($server, $fd)
{
echo "客户端: {$fd} 已关闭\n";
}
}new SW();
swoole-websocket
文章图片
服务器
文章图片
浏览器
文章图片
浏览器
推荐阅读
- spring|spring boot项目启动websocket
- AsyncTask的个人小结
- WebSocket|WebSocket 语法解析
- Websocket和Socket.io的区别及应用
- c#中task与thread区别及其使用的方法示例
- Android|Android gradle打包涉及task源码解析(五)
- swoole打造高性能赛事直播平台1(准备工作)
- Task|Task 03 从函数到高级魔法方法(Day 08 类与对象)
- AsyncTaske简单理解
- Day|Day 14-task