hyperf实现websocket

如何用hyperf实现websocket服务

1创建服务器

>composer require hyperf/websocket-server

2 修改 config/autoload/server.php,增加以下配置。

```
[
[
'name' => 'ws',
'type' => Server::SERVER_WEBSOCKET,
'host' => '0.0.0.0',
'port' => 9502,
'sock_type' => SWOOLE_SOCK_TCP,
'callbacks' => [
Event::ON_HAND_SHAKE => [Hyperf\WebSocketServer\Server::class, 'onHandShake'],
Event::ON_MESSAGE => [Hyperf\WebSocketServer\Server::class, 'onMessage'],
Event::ON_CLOSE => [Hyperf\WebSocketServer\Server::class, 'onClose'],
],
],
],
];
```

3 配置路由

```
'服务端收到消息了',
'fd'=>$frame->fd,
'data'=>$frame->data
]);
$server->push($frame->fd, '收到消息了:'.$frame->data);
}

public function onClose($server, int $fd, int $reactorId): void
{
print_r([
'type'=>'服务端与客户端的连接关闭了',
'fd'=>$fd
]);
}

public function onOpen($server, Request $request): void
{
print_r([
'type'=>'服务端接入了新的连接',
'open'=>$request->fd
]);
$server->push($request->fd, '您已链接进来了'.$request->fd);
}
}
[root@iZbp13ph356ra22ldly01lZ Controller]#

```

5 创建客户端

`composer require hyperf/websocket-client`

6 创建控制器

```
[root@iZbp13ph356ra22ldly01lZ Controller]# cat IndexController.php
clientFactory->create($host,false);
// 向 WebSocket 服务端发送消息
$client->push('HttpServer 中使用 WebSocket Client 发送数据。');
// 获取服务端响应的消息,服务端需要通过 push 向本客户端的 fd 投递消息,才能获取;以下设置超时时间 2s,接收到的数据类型为 Frame 对象。
/** @var Frame $msg */
$msg = $client->recv(100);
// 获取文本数据:$res_msg->data

return([
'type'=>'客户端收到返回数据',
'result'=>$msg->data
]);
}
}
```

7 创建web客户端

```
[root@iZbp13ph356ra22ldly01lZ 47.96.13.118]# cat index.html

```

8 打开防火墙开放9501和9502端口号

9 可以通过`http://coolaf.com/tool/chattest`来测试websocket服务是否成功

    A+
发布日期:2021年12月30日  所属分类:未分类

发表评论

:?: :razz: :sad: :evil: :!: :smile: :oops: :grin: :eek: :shock: :???: :cool: :lol: :mad: :twisted: :roll: :wink: :idea: :arrow: :neutral: :cry: :mrgreen: