基于thinkphp的fastadmin使用composer安装swoole并启用swoole的websocket服务
基于thinkphp的fastadmin使用composer安装swoole并启用swoole的websocket服务,首先在站点根目录建立服务启动swoole/start.php<?php
require_once '/data/dj.zljt.net/application/common/library/WSServer.php';
// 导入 WSServer 类所在的命名空间
use app\common\library\WSServer;
// 实例化 WSServer 类并启动服务器
$ws = new WSServer();
// \think\Log::record($ws);
$ws->start();在application/common/libary/WSServer.php中写如下代码:
<?php
namespace app\common\library;
require_once '/data/dj.zljt.net/vendor/topthink/think-swoole/src/Server.php';
use fast\Random;
use think\Hook;
use think\swoole\Server;
/**
* 短信验证码类
*/
class WSServer extends Server
{
protected $host = '127.0.0.1'; //监听所有地址
protected $port = 9501; //监听9501端口
protected $serverType = 'socket';
protected $option = [
'worker_num'=>4, //设置启动的Worker进程数
'daemonize' =>false, //守护进程化(上线改为true)
'backlog' =>128, //Listen队列长度
'dispatch_mode' =>2, //固定模式,保证同一个连接发来的数据只会被同一个worker处理
//心跳检测:每60秒遍历所有连接,强制关闭10分钟内没有向服务器发送任何数据的连接
'heartbeat_check_interval' =>60,
'heartbeat_idle_time' =>600
];
//建立连接时回调函数
public function onOpen($server, $req)
{
$fd = $req->fd;//客户端标识
$uid = $req->get['uid'];//客户端传递的用户id
$token = $req->get['token'];//客户端传递的用户登录token
//省略token验证逻辑......
if (!$token) {
$arr = array('status'=> 2,'message'=> 'token已过期');
$server->push($fd, json_encode($arr));
$server->close($fd);
return;
}
//省略给用户绑定fd逻辑......
echo "用户{$uid}建立了连接,标识为{$fd}\n";
}
//接收数据时回调函数
public function onMessage($server, $frame)
{
$fd = $frame->fd;
$message = $frame->data;
//省略通过fd查询用户uid逻辑......
$uid = 666;
$data['uid'] = $uid;
$data['message'] = '用户'.$uid.'发送了:'.$message;
$data['post_time'] = date("m/d H:i",time());
$arr = array('status'=> 1,'message'=> 'success','data'=> $data);
//仅推送给当前连接用户
//$server- push($fd, json_encode($arr));
//推送给全部连接用户
foreach($server->connections as $fd) {
$server->push($fd, json_encode($arr));
}
}
//连接关闭时回调函数
public function onClose($server, $fd)
{
echo "标识{$fd}关闭了连接\n";
}
}使用命令行进入根目录,运行:
php server/start.php启用swoole
如果需要关闭:
php server/stop.php
如果关闭不了,可以先查看进程:
ps aux | grep swoole第二列是pid,使用如下命令关闭:
kill 1029910299是pid。
页:
[1]