执行以下代码,启动websocket服务
$server = new Swoole\WebSocket\Server('0.0.0.0', 9502);
$server->set(['open_websocket_close_frame' => true]);
// 连接
$server->on('Open',function($server, $request){
// 这里面可以做用户登录的判断
var_dump($request->fd);// 这个fd相当于连接id,是唯一的
$server->push($request->fd, "hello welcome\n");
});
// 发送消息
$server->on('Message', function ($server, $frame) {
if ($frame->opcode == 0x08) {
echo "Close frame receive:code {$frame->code} Reason {$frame->reason}";
} else {
// 只要用户一直连接,服务端可以一直push消息给客户端
$server->push($frame->fd,"server data is :".$frame->data);
}
});
// 关闭
$server->on('Close', function ($server, $fd) {
var_dump("Client close by:".$fd);
});
$server->start();
客户端可以用js代码测试
var wsServer = 'ws://172.26.211.189:9502';
var websocket = new WebSocket(wsServer);
websocket.onopen = function (evt) {
console.log("Connected to Websocket server.");
}
websocket.onclose = function (evt) {
console.log("Disconnected");
}
websocket.onmessage = function (evt) {
console.log('Retrieved data from server:' + evt.data);
}
websocket.onerror = function (evt, e) {
console.log('Error occured:' + evt.data);
}
// websocket.send("发送消息");