为了账号安全,请及时绑定邮箱和手机立即绑定

如何为Discord网关设置心跳功能

如何为Discord网关设置心跳功能

Cats萌萌 2022-12-02 10:39:48
这不会是解决一个问题的非常具体的问题,所以很抱歉。这是我之前询问的有关为我的 Discord 机器人网站获取实时服务器计数的问题的后续行动。在我看来,websocket 连接是获取此信息的最佳方式,因为通过 discord.js 获取此信息占用了太多内存,因为 discord.js 所做的远远超出了我的需要。我知道对于 websocket 连接,我需要获取连接 URL、连接,然后进行心跳并接收心跳确认。不过,我在将这些想法转化为代码时遇到了很多麻烦。到目前为止,我可以请求一个 URL、连接并开始心跳,但我不知道如何 1) 在接收信息的同时保持心跳和 2) 如果连接中断(我没有收到确认)则停止心跳。导致我出现问题的主要原因是无法使用多个消息侦听器。如果有人能指出正确的总体方向或解决我当前的问题,我将不胜感激。当前代码,如果有帮助(我知道它实际上不起作用):const XMLHttpRequest = require('xmlhttprequest').XMLHttpRequestconst WebSocket = require('ws')let xhr = new XMLHttpRequest()xhr.onload = (req, res) => {    if (xhr.readyState === 4 && xhr.status === 200) {        console.log(xhr.responseText)        main(JSON.parse(xhr.responseText))    } else {        console.error(`ReadyState: ${xhr.readyState}    Status: ${xhr.status}`)    }}xhr.open("GET", 'https://discord.com/api/gateway/bot', false)xhr.setRequestHeader("Authorization", "MY_BOT_TOKEN_THIS_IS_A_PLACEHOLDER_DONT_TELL_ME_ITS_WRONG_IN_COMMENTS")xhr.send()function main(response) {    let socket = new WebSocket(`${response.url}/?v=6&encoding=json`)    var hello    socket.onopen = (event) => {        console.log("Connection established")    }    socket.onclose = (event) => {        console.log(`Connection closed: code=${event.code} reason=${event.reason}`)    }
查看完整描述

2 回答

?
慕桂英4014372

TA贡献1871条经验 获得超13个赞

我有一些建议。

  1. let alert在错误的地方。它的范围应该在let WebSocket.

  2. 不要removeEventListener。最好有一个消息处理程序,switch (message.op)然后根据message.op(你命名的hello)的值调用其他方法。

  3. 如果你真的想removeEventListener,你不能只传递类型"message",你还需要传递对函数本身的引用。见这里和下面。

  4. 如果您需要保存第一条消息, 的值hello,那么还要将其范围限定在文件的顶层。

  5. 当你停止心跳时,你不会说你想做什么,但你已经有了它的位置,它就是你设置的地方alive = false。你可以打电话给socket.close()那里或alert你的用户出了什么问题。取决于您的应用程序。

const myHandler = function (data) { /* do stuff with data */ };

socket.addEventListener("message", myHandler);

socket.removeEventListener("message", myHandler);


查看完整回答
反对 回复 2022-12-02
?
守着一只汪

TA贡献1872条经验 获得超3个赞

我尝试使用不同的代码,因为我找不到另一个代码,当我尝试发送 3 次心跳时遇到问题连接已断开连接已关闭:代码 = 1000 原因 =



查看完整回答
反对 回复 2022-12-02
  • 2 回答
  • 0 关注
  • 102 浏览
慕课专栏
更多

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信