think-swoole对于websocket的使用
时间: 2023-11-08 15:01:27 浏览: 136
think-swoole 是一个基于 Swoole 扩展的 PHP 框架,它提供了对 WebSocket 的支持。下面是一个简单的示例:
```php
// 定义 WebSocket 控制器类
namespace app\index\controller;
use think\swoole\WebSocket;
class Chat extends WebSocket
{
protected $server;
// WebSocket 连接建立时触发的事件
public function onOpen($server, $request)
{
$this->server = $server;
$this->send($request->fd, 'Welcome to Chat Room!');
}
// WebSocket 接收到消息时触发的事件
public function onMessage($server, $frame)
{
$data = $frame->data;
foreach ($server->connections as $fd) {
$this->send($fd, $data);
}
}
// WebSocket 连接关闭时触发的事件
public function onClose($server, $fd)
{
echo "client-{$fd} is closed\n";
}
}
```
在上面的代码中,我们定义了一个名为 Chat 的 WebSocket 控制器类,它继承了 think\swoole\WebSocket 类,并实现了三个事件方法 onOpen、onMessage 和 onClose。在 onOpen 方法中,我们向客户端发送了一条欢迎信息;在 onMessage 方法中,我们将接收到的消息发送给所有连接的客户端;在 onClose 方法中,我们输出了客户端关闭的信息。
接下来,在路由配置文件中定义 WebSocket 路由:
```php
// 定义 WebSocket 路由
use think\facade\Route;
Route::get('/ws', 'index/Chat');
```
最后,在 Swoole 服务器配置文件中开启 WebSocket 服务:
```php
// Swoole 服务器配置文件
use think\swoole\Server;
return [
'host' => '0.0.0.0',
'port' => 9501,
'type' => Server::SERVER_TYPE_WEB_SOCKET,
'mode' => SWOOLE_PROCESS,
'sock_type' => SWOOLE_SOCK_TCP,
'option' => [
'worker_num' => 8,
'daemonize' => false,
'backlog' => 128,
],
];
```
在上面的代码中,我们将服务器的类型设置为 WebSocket,并开启了 8 个 Worker 进程。
现在,我们就可以启动 Swoole 服务器,并在客户端连接到 WebSocket 服务后进行消息的发送和接收了。
阅读全文