利用Swoole编写WebSocket服务 - 高效可靠的Web应用开发

silverwq
2022-10-13 / 0 评论 / 189 阅读 / 正在检测是否收录...

执行以下代码,启动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("发送消息");
0

评论 (0)

取消