swoole端
<?php // 创建一个WebSocket服务器 $ws = new Swoole\WebSocket\Server("0.0.0.0", 9501); // 创建一个Swoole Table实例,用于存储消息队列 $table = new Swoole\Table(1024); // 设置表容量 $table->column('topic', Swoole\Table::TYPE_STRING, 64); // 主题 $table->column('message', Swoole\Table::TYPE_STRING, 255); // 消息 $table->create(); // 监听WebSocket连接打开事件 $ws->on('open', function ($ws, $request) { echo "Client {$request->fd} connected.\n"; }); // 监听WebSocket消息事件 $ws->on('message', function ($ws, $frame) use ($table) { // 解析客户端发送的消息 $data = json_decode($frame->data, true); // 检查是否为发布消息操作 if (isset($data['action']) && $data['action'] === 'publish') { // 存储消息到Table $key = uniqid(); // 生成唯一键 $table->set($key, ['topic' => $data['topic'], 'message' => $data['message']]); // 广播消息给所有已订阅此主题的客户端 broadcastMessage($ws, $data['topic']); } }); // 监听WebSocket连接关闭事件 $ws->on('close', function ($ws, $fd) { echo "Client {$fd} disconnected.\n"; }); // 启动服务器 $ws->start(); // 广播消息给已订阅特定主题的客户端 function broadcastMessage(Swoole\WebSocket\Server $ws, $topic) { global $table; // 遍历所有连接的客户端 foreach ($ws->connections as $fd) { // 获取客户端发送的订阅主题 $clientTopic = $ws->exist($fd) ? $ws->connection_info($fd)['topic'] : null; // 如果客户端订阅了该主题,则广播消息 if ($clientTopic === $topic) { // 遍历存储的消息,找到匹配主题的消息并发送 $table->rewind(); while ($row = $table->current()) { if ($row['topic'] === $topic) { $ws->push($fd, json_encode(['topic' => $topic, 'message' => $row['message']])); } $table->next(); } } } }html端js连接websocket示例代码
<script> var ws = new WebSocket("ws://localhost:9501"); ws.onopen = function() { console.log("Connected to server"); ws.send(JSON.stringify({action: 'subscribe', topic: 'myTopic'})); }; ws.onmessage = function(event) { var data = JSON.parse(event.data); console.log("Received message:", data.topic, data.message); }; </script>
网友回复
pywebview如何使用浏览器自带语音识别与webspeech 的api?
pywebview如何禁用浏览器的右键菜单?
即梦ai的agent生成的儿童故事视频为啥没有配音与声音台词?
php子域名可获取主域名的session会话信息吗?
nginx如何支持php-fpm的流式请求openai api输出的设置?
阿里的Qwen3-Next与Qwen3-max有啥不同?
如何调用ai根据主题生成一组带解说和画面一致性的儿童绘本故事视频?
有没有ai根据需求生成包含声效图片三维模型等素材的html游戏网站?
js如何去除html网页中style中没有用到的css代码?
python如何设置oss的阻止公开访问的开与关?