huaweichenai/web-socket

这是一个实现WebSocket的服务类

1.0 2020-01-09 07:46 UTC

This package is auto-updated.

Last update: 2024-09-10 17:37:07 UTC


README

这是一个实现WebSocket的服务类(这是一个WebSocket的服务类,可以快速帮助您实现WebSocket的一些基本功能)

Latest Stable Version Total Downloads Latest Unstable Version License

安装

composer require huaweichenai/web-socket

用法

配置

$host = '0.0.0.0';
$port = '8888';
$configs = [
    // 日志文件路径
  'log_file' => dirname(__DIR__) . '/logs/swoole.log',
  // 进程的PID存储文件
  'pid_file' => dirname(__DIR__) . '/logs/swoole.server.pid'
]

其他的详细运行参数可参考:https://www.wj0511.com/site/detail.html?id=423

使用

WebSocket启动

$server = new WebSocketServer($host, $port, $configs);
$server->handshake = true;//设置自定义握手配置
$server->run();

WebSocket停止

$server = new WebSocketServer($host, $port, $configs);
$server->stop();

根据以上步骤可以简单实现WebSocket运行,如果您需要在WebSocket运行期间:启动、握手、连接、接收消息、HTTP响应、客户端关闭连接、服务端关闭连接等阶段自行设置自定义方法的话 1 您可以创建一个类,专门继承WebSocket,并重写各个阶段的事件

class Swoole extends WebSocketServer
{
    /**
     * @var bool 
     * 开启自定义握手处理
     */
    public $handshake = true;

    /**
     * @param \swoole_websocket_server $server
     * 
     * 自定义websocket服务启动处理
     */
    public function socketStart($server)
    {
        //业务代码
    }

    /**
     * @param \swoole_websocket_server $server
     * @param \swoole_http_request $request
     * 
     * 自定义websocket建立连接处理
     */
    public function socketOpen($server, $request)
    {
        //业务代码
    }

    /**
     * @param \swoole_websocket_server $server
     * @param \swoole_websocket_frame $frame
     * 
     * 自定义websocket 接受客户端消息处理
     */
    public function socketMessage($server, $frame)
    {
        //业务代码
    }

    /**
     * @param \swoole_http_request $request
     * @param \swoole_http_response $response
     * 
     * 自定义websocket握手处理
     */
    public function socketHandshake($request, $response)
    {
        //业务代码
        //业务代码
    }

    /**
     * @param \swoole_http_request $request
     * @param \swoole_http_response $response
     * 
     * 自定义websocket http响应处理
     */
    public function socketRequest($request, $response)
    {
        //业务代码
    }

    /**
     * @param \swoole_websocket_server $server
     * @param $fd
     * 
     * 自定义websocket 客户端连接关闭处理
     */
    public function socketClose($server, $fd)
    {
        //业务代码
    }

    /**
     * @param \swoole_websocket_server $server
     * 
     * 自定义websocket 服务端正常关闭处理
     */
    public function socketShutdown($server)
    {
        //业务代码
    }


}

在上述业务代码中,我们可以使用以下方法向指定客户端发送信息

$this->sendMessage($request->fd, $server,$data);

还可以使用如下方法:

$this->getParams($request) //获取客户端连接路由
$this->getRoute($request) //获取客户端传参

2 自定义类创建好之后

$server = new Swoole($host, $port, $configs);
$server->run();