alexboo/websocket-handler

WebSocket 处理器

dev-master 2018-01-26 04:00 UTC

This package is not auto-updated.

Last update: 2024-09-14 18:28:01 UTC


README

一个用于定义WebSocket命令处理器的小型库

安装

您可以使用composer安装此库

composer require alexboo/websocket-handler

使用方法

您需要创建一个处理器工厂以创建处理每个命令的处理器。它必须实现HandlerFactoryInterface接口。在处理器工厂中,您可以在创建处理器之前添加ACL。

示例处理器工厂


class HandlerFactory implements HandlerFactoryInterface
{
    /**
     * Get handler for command
     * @param Client $client
     * @param $command
     * @return Handler
     */
    public function getHandler(Client $client, $command)
    {    
        $handler = new Handler();
        switch ($command) {
            case "auth":
                $handler->setObject(new AuthService(), "auth");
                break;
            case "message":
                $handler->setClosure(function(){
                    // do something
                });
                break;
        }

        return $handler;
    }

    /**
     * Client open connection
     * @param Client $client
     * @return mixed
     */
    public function open(Client $client){

    }

    /**
     * Client close connection
     * @param Client $client
     * @return mixed
     */
    public function close(Client $client)
    {
    }
}

然后您可以启动WebSocket服务器

$wsHandler =  WebSocketHandler::getInstance(new HandlerFactory());

$ioServer = IoServer::factory(
    new HttpServer(new \Ratchet\WebSocket\WsServer($wsHandler)),
    8001
);

$ioServer->run();

必须传递给基于ReflectionApi定义的处理器的参数。您可以通过指定"Client"类的参数或对象实现的Alexboo\WebSocketHandler\Interfaces\RequestInterface中的查询参数来请求有关客户端的信息。

示例

class AuthRequest implements RequestInterface {
   public function setData($data){
       
   }
}

class AuthService {

   public function auth(Client $client, AuthRequest $request)
   {
       
   }
}