• Swoole从入门到入土(15)——WebSocket服务器[初步接触]


    WebSocket 是 HTML5 开始提供的一种在单个 TCP 连接上进行全双工通讯的协议。换句话说,Websocket让web可以与服务端实现长连接。

    在Swoole中,通过内置的 WebSocket 服务器支持,通过几行 PHP 代码就可以写出一个异步 IO 的多进程的 WebSocket 服务器。WebSocketServer 继承自 HttpServer,所以 HttpServer 提供的所有 API 和配置项都可以使用。

    现在我们用一段简短的代码,先了解websocket在swoole中如何实现:

    $server = new SwooleWebSocketServer("0.0.0.0", 9501);
    
    $server->on('open', function (SwooleWebSocketServer $server, $request) {
        echo "server: handshake success with fd{$request->fd}
    ";
    });
    
    $server->on('message', function (SwooleWebSocketServer $server, $frame) {
        echo "receive from {$frame->fd}:{$frame->data},opcode:{$frame->opcode},fin:{$frame->finish}
    ";
        $server->push($frame->fd, "this is server");
    });
    
    $server->on('close', function ($ser, $fd) {
        echo "client {$fd} closed
    ";
    });
    
    $server->on('request', function (SwooleHttpRequest $request, SwooleHttpResponse $response) {
        global $server;//调用外部的server
        // $server->connections 遍历所有websocket连接用户的fd,给所有用户推送
        foreach ($server->connections as $fd) {
            // 需要先判断是否是正确的websocket连接,否则有可能会push失败
            if ($server->isEstablished($fd)) {
                $server->push($fd, $request->get['message']);
            }
        }
    });
    
    $server->start();

    在这里,onOpen / onMessage / onClose属于websocket的专属事件(暂时先不用了解得太详细)。而onRequest则是为了让WebSocketServer 也可以同时作为 HTTP 服务器。未设置 onRequest 回调,WebSocketServer 收到 HTTP 请求后会返回 HTTP 400 错误页面。

    这段代码运行后,如何调试呢?这时候我们需要一个本地的websocket调试器。本人在网上寻找了挺久,除了apache jmeter有相关的插件支持websocket调试之外,就没有太理想的工具。所以,暂时自己写了简单的一个调试工具,勉强应付使用。

    点击链接进入工具:传送门

    --------------------------  我是可爱的分割线  ----------------------------

    最后博主借地宣传一下,漳州编程小组招新了,这是一个面向漳州青少年信息学/软件设计的学习小组,有意向的同学点击链接,联系我吧。

  • 相关阅读:
    第六课 课程重点(仿站及常见代码用法)
    第七课 课程重点(js、声明变量、数据类型)
    html作业及答案
    【实用代码】选项卡切换——带标题底纹样式
    CSS 样式表(小结)
    各大常用浏览器兼容性代码
    【小练习】“表格”制作及答案
    第一周综合练习
    第五课 课程重点(z-index、overflow、浏览器兼容性)
    当前单元测试主流工具
  • 原文地址:https://www.cnblogs.com/ddcoder/p/13825180.html
Copyright © 2020-2023  润新知