Swoole WebSocket 服务
1,后端代码 websocket_server.php
<?php // websocket_server.php $server = new Swoole\WebSocket\Server("0.0.0.0", 9501); // 有客户端连接进来 $server->on('open', function ($server, $request) { echo "server: handshake success with fd {$request->fd}\n"; }); // 接收到消息 $server->on('message', function ($server, $frame) { echo "received message: {$frame->data}\n"; // 假设这里处理数据库更新逻辑 $data = json_decode($frame->data, true); if (isset($data['action']) && $data['action'] === 'batchDataStatus') { // 这里可以直接调用你原来的逻辑处理 // 伪代码:批量更新数据库 // Db::table('xxx')->whereIn('id', $data['ids'])->update([...]); // 然后实时通知前端处理完成 $server->push($frame->fd, json_encode([ 'status' => 'success', 'message' => '更新成功,数据已刷新!' ])); } }); // 连接关闭 $server->on('close', function ($server, $fd) { echo "client {$fd} closed\n"; }); // 启动服务 $server->start();
2,前端代码:
// 创建 WebSocket 连接 var socket = new WebSocket("ws://112.124.6.181:9501"); // 连接成功 socket.onopen = function() { console.log('WebSocket连接成功'); }; // 接收消息 socket.onmessage = function(event) { var res = JSON.parse(event.data); console.log('接收到后端推送:', res); if (res.status === 'success') { layer.msg(res.message); // 这里可以直接刷新表格,比如 table.reload('your-table-id'); } }; // 发送请求(改这里) layui.$("button#batchDataStatus").on("click", function () { checkSessionIds(); let dataStatus = $("#dataDataStatus").val(); if (!dataStatus) { layer.msg('状态不能为0'); return; } if (sessionData[session_name + '_selectedIds'] != '') { let data = { action: 'batchDataStatus', ids: sessionData[session_name + '_selectedIds'], dataStatus: dataStatus }; socket.send(JSON.stringify(data)); } else { layer.msg('请选择数据'); } });
浙公网安备 33010602011771号