TP6实时推送代码 composer require workerman/workerman // 2. WebSocket服务(server/WebSocket.php) use Workerman\\Worker; use Workerman\\Connection\\TcpConnection; require_once __DIR__ . '/vendor/autoload.php'; $wsWorker = new Worker('websocket://0.0.0.0:2346'); $wsWorker->count = 4; // 进程数 // 保存所有连接 $connections = []; $wsWorker->onConnect = function (TcpConnection $connection) use (&$connections) { $connection->onWebSocketConnect = function ($connection, $http_header) { // 用户认证逻辑(如解析JWT) $user_id = parse_user_id_from_header($http_header); $connection->user_id = $user_id; $connections[$user_id] = $connection; }; }; $wsWorker->onMessage = function (TcpConnection $connection, $data) use (&$connections) { // 处理消息(如转发给指定用户) $message = json_decode($data, true); if ($message['type'] === 'private_message') { $targetUser = $connections[$message['to_user_id']]; if ($targetUser) { $targetUser->send(json_encode([ 'type' => 'new_message', 'content' => $message['content'] ])); } } }; $wsWorker->onClose = function (TcpConnection $connection) use (&$connections) { // 清理断开连接 if (isset($connection->user_id)) { unset($connections[$connection->user_id]); } }; Worker::runAll(); // 3. 前端连接(utils/websocket.js) export function connectWebSocket(userId) { const socketTask = uni.connectSocket({ url: `ws://your-server-ip:2346`, success: () => { console.log('WebSocket连接成功'); } }); socketTask.onMessage(res => { const data = JSON.parse(res.data); if (data.type === 'new_message') { uni.vibrateShort(); // 震动提醒 uni.showToast({ title: '新消息', icon: 'none' }); } }); return socketTask; } 四、关键优化点 断线重连:前端监听onClose事件,自动重连WebSocket。 消息队列:使用Redis存储未读消息,用户离线时通过短信/邮件提醒。 性能监控:通过uni.getNetworkType检测网络状态,优化弱网环境体验。"}