[网页插件][更新] @提醒(1.0.4)

回复列表(61|显示机器人聊天)
  • @Ta / 2023-03-30 / /

    @hik,看起来你的网页插件正在快速重连WebSocket服务器。
    顺便@残缘,加一下重连时间限制。

  • @Ta / 2023-03-30 / /
    @老虎会游泳,我应该怎么修改。现在的代码似乎是5秒重连,复制你之前帖子里的。
        // 当 WebSocket 连接出错时触发
        socket.onerror = (event) => {
            console.error("WebSocket 连接出错", event);
            // 关闭当前 WebSocket 连接
            socket.close();
    
            // 重新连接 WebSocket
            setTimeout(() => {
                console.log("重新连接 WebSocket");
                connectToWebSocket();
            }, 5000); // 延迟 5 秒重新连接
        };
    
        // 当 WebSocket 连接关闭时触发
        socket.onclose = (event) => {
            console.log("WebSocket 连接已关闭", event);
            // 重新连接 WebSocket
            setTimeout(() => {
                console.log("重新连接 WebSocket");
                connectToWebSocket();
            }, 5000); // 延迟 5 秒重新连接
        };
    
  • @Ta / 2023-03-30 / /
    @老虎会游泳,要不直接把重连去了然后弹个窗?感觉一般如果连接失败,重连也高概率重连不上。
  • @Ta / 2023-03-30 / /
    @老虎会游泳,另外似乎socket会把一些机器人的心跳返回给我。似乎没有必要。这个如果用户想获取直接主动去跟接口获取就行吧。没必要主动推送。
    image.png(145.98 KB)
  • @Ta / 2023-03-30 / /

    @残缘@rkonfj,对了,我的js参考客户端有Bug,因为onerroronclose会各自触发一次,导致1个连接失败后打开2个连接,连接数指数增长。

    要改成这样:

        // 当 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 秒重新连接
        };
    
  • @Ta / 2023-03-30 / /

    @残缘,至于机器人心跳,是 @rkonfj 想发的。我也建议他不要发给未订阅心跳的连接,但是还没有实现。

  • @Ta / 2023-03-30 / /

    @残缘,如果想保活,可以发{"action":"ping"}

    socket.send('{"action":"ping"}');
    

    会响应一个{"event":"ping","data":"pong"}

  • @Ta / 2023-03-30 / /
    @老虎会游泳,好了改了。其实还有一个问题就是用户每次打开一个新的页面就会新建一个socket连接。似乎可以用油猴脚本或者Chrome的后台任务来解决,但是这样有的浏览器就不支持了。
  • @Ta / 2023-03-30 / /

    @残缘,多页面倒是没关系,目前压力不大。如果想改进那就只能用 SharedWorker 了。

  • @Ta / 2023-03-30 / /
    @老虎会游泳,我不太清楚这个服务的具体实现细节。如果有两个页面,我关闭了一个,另外一个页面服务的应该不会给他发送close的消息吧?
  • @Ta / 2023-03-30 / /

    @残缘,不会。close不是一个消息,而是TCP连接断开的事件。

  • @Ta / 2023-03-30 / /

    @残缘,当socket.onerror发生时,TCP连接处于半关状态:服务器已经关闭连接,但客户端还没有。当socket.onclose发生时,TCP连接在服务器和客户端双方都彻底关闭。

  • @Ta / 2023-03-30 / /
    @老虎会游泳,明白
  • @Ta / 2023-03-31 / /

    @老虎会游泳@残缘,已经实现可取消订阅事件(可取消订阅的事件有msg online offline

    不需要订阅机器人上下线事件可以在 websocket 连接建立成功后发送:
    {"action": "unsub", "data": ["online", "offline"]}

    后续有需要这些事件再发送:
    {"action": "sub", "data": ["online", "offline"]}

    不清楚取消了订阅哪些事件发送:
    {"action": "lsunsub"}

    如果老虎更新hu60bot程序后,客户端什么也不做就和之前一样,会收到所有事件

  • @Ta / 2023-03-31 / /

    @rkonfj,建议你给websocket服务写一个手册

  • @Ta / 2023-03-31 / /

    @老虎会游泳,功能比较多的话,我来更新下 README.md

  • @Ta / 2023-03-31 / /
    @老虎会游泳@rkonfj
    似乎服务太不稳定。
    image.png(122.21 KB)
  • @Ta / 2023-03-31 / /

    @残缘,服务器已经稳定运行 25h小时了,所以不是进程退出导致的。应该是,网络问题或者到达用户连接数上限,大概率是达用户连接数上限。看老虎怎么说

  • @Ta / 2023-03-31 / /
    @无名啊,我看错了,以为是你刚回复的,可以忽略。 
添加新回复
回复需要登录