虎绿林WebSocket消息推送参考客户端

@Ta 03-19 03:19发布,03-19 19:22修改 739点击

推送服务器源代码:https://github.com/hu60t/hu60bot/
@rkonfj 创建。

WebSocket推送服务器地址:

wss://hu60.cn/ws/msg

认证方式:

  1. Cookie hu60_sid(由浏览器自动发送,不支持跨域)
Cookie: hu60_sid=用户sid
  1. GET参数_sid(支持跨域)
wss://hu60.cn/ws/msg?_sid=用户sid

参考客户端:

function connectToWebSocket() {
  const socket = new WebSocket("wss://" + location.host + "/ws/msg");

  // 开启 WebSocket 连接时触发
  socket.onopen = (event) => {
    console.log("WebSocket 连接已经建立");

    // 连上推送服务器后还要再查询一次消息数量接口,防止错过还没连上的这段时间发来的消息
    fetch('/q.php/user.stat.json').then(async function(result) {
        let json = await result.json();
        console.log('新内信条数:', json.newMsg, '新@消息条数', json.newAtInfo);
    });

    // 每隔一分钟发送一个 keep alive 消息,防止连接断开
    setInterval(() => {
      socket.send('{"action":"ping"}');
    }, 60000);
  }

  // 接收到 WebSocket 消息时触发
  socket.onmessage = (event) => {
    console.log("收到 WebSocket 消息", event.data);
  };

  // 当 WebSocket 连接出错时触发
  socket.onerror = (event) => {
    console.error("WebSocket 连接出错", event);
    // 关闭当前 WebSocket 连接
    socket.close();
  };

  // 当 WebSocket 连接关闭时触发
  socket.onclose = (event) => {
    console.log("WebSocket 连接已关闭", event);

    // 重新连接 WebSocket
    setTimeout(() => {
      console.log("重新连接 WebSocket");
      connectToWebSocket();
    }, 5000); // 延迟 5 秒重新连接
  };
}

// 连接 WebSocket
connectToWebSocket();

收到的推送消息event.data可能会是以下几种格式:

  1. keep-alive响应,只是为了保持连接活跃。
{"event":"ping","data":"pong"}
  1. 内信推送,type字段为0
{"event":"msg","data":{"id":995610,"touid":1,"byuid":1,"type":0,"isread":0,"content":"[{\"type\":\"markdown\"},{\"type\":\"text\",\"value\":\"\\r\\n\"},{\"type\":\"face\",\"face\":\"滑稽\"}]","ctime":"0001-01-01T00:00:00Z"}}
  1. @消息推送,type字段为1。
{"event":"msg","data":{"id":995612,"touid":1,"byuid":1,"type":1,"isread":0,"content":"[{\"type\":\"atMsg\",\"uid\":1,\"pos\":\"聊天室“秘密虎穴”第688楼中\",\"url\":\"addin.chat.%E7%A7%98%E5%AF%86%E8%99%8E%E7%A9%B4.{$BID}?floor=688#688\",\"msg\":[{\"type\":\"markdown\"},{\"type\":\"text\",\"value\":\"\\r\\n\"},{\"type\":\"at\",\"tag\":\"老虎会游泳\",\"uid\":1},{\"type\":\"text\",\"value\":\",\"},{\"type\":\"face\",\"face\":\"哈哈\"}]}]","ctime":"0001-01-01T00:00:00Z"}}
回复列表(6)
添加新回复
回复需要登录