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('请选择数据');
    }
});

 

posted @ 2025-04-21 14:34  u-ttXY  阅读(9)  评论(0)    收藏  举报