当前位置: 首页 > 知识库问答 >
问题:

我如何保持脚本的流式传输,这样就不会断开连接?

孙永嘉
2023-03-14

所以,我使用的是过滤流。不幸的是,每次我打开它,5分钟后它就会关闭,但在这段时间里,它会捕捉推文。我想做的是保持24/7,这样5分钟后就不会关机。此外,如果它断开连接,我希望如此,它会再次尝试连接。

这是我用来帮助调整代码的代码示例:

  • https://github.com/twitterdev/Twitter-API-v2-sample-code/blob/master/Filtered-Stream/filtered_stream.js
function streamTweets(retryAttempt) {
  const stream = needle.get(streamURL, {
    headers: {
      Authorization: `Bearer ${TOKEN}`
    },
    retryAttempt: 20000
  });

  stream.on('data', (data) => {
    try {
      const json = JSON.parse(data)
      console.log(json.data.text)
      retryAttempt = 0;
    } catch (e) {

      if (data.detail === "This stream is currently at the maximum allowed connection limit.") {
        console.log(data.detail)
        process.exit(1)
      } else {
        // Keep alive signal received. Do nothing.
      }
    }
  }).on('err', error => {
    if (error.code !== 'ECONNRESET') {
      console.log(error.code);
      process.exit(1);
    } else {
      // This reconnection logic will attempt to reconnect when a disconnection is detected.
      // To avoid rate limits, this logic implements exponential backoff, so the wait time
      // will increase if the client cannot reconnect to the stream. 
      setTimeout(() => {
        console.warn("A connection error occurred. Reconnecting...")
        streamTweets(++retryAttempt);
      }, 2 ** retryAttempt)

    }
  });

  return stream;
}

(async() => {
  let currentRules;

  try {
    //get all stream rules
    currentRules = await getRules();

    //delete all stream rules
    await deleteRules(currentRules);

    //Set rules based on array above
    await setRules();

  } catch (e) {
    console.error(e);
    process.exit(1);
  }

  streamTweets(0);
})();

共有1个答案

姚凯歌
2023-03-14

你试过在你的页眉中发送保留生命吗?

此外,我还更改了授权标头,以匹配链接的GitHub代码源的语法。

function streamTweets(retryAttempt) {
  const stream = needle.get(streamURL, {
    headers: {
      "authorization": `Bearer ${token}`,
      "Connection": "keep-alive"
    },
    retryAttempt: 20000
  });

此外,根据Twitter文档:“如果你想关闭连接,你可以在Mac或Windows系统上的命令行工具中按Control-C来断开连接,也可以关闭窗口。”

您确定这不是因为您关闭了终端会话而断开连接,还是因为ssh超时之类的原因而关闭?

 类似资料:
  • 问题内容: 我刚开始使用Python。当我在Windows上执行python脚本文件时,出现输出窗口,但立即消失。我需要它留在那里,以便我可以分析我的输出。如何保持打开状态? 问题答案: 你有几种选择: 从已经打开的终端运行程序。打开命令提示符并键入: 为此,你需要在路径中使用python可执行文件。只需检查如何在Windows 上编辑环境变量,然后添加(或安装python的任何目录)即可。 程序

  • 只是无法计算方法中的return语句。

  • 我知道,一旦集合的流操作为forEach-min-collect-code,该流即关闭,不再适用于进一步的函数调用。 我的问题是,如何避免“重复流操作”,以便我们可以在同一个集合上执行不同的流操作,而不需要重复计算? 例如。 好吧,我知道为了得到s1。max我必须再次构建流,如下所示: 这是可行的,但似乎是第二次做多余的工作。我希望我们可以使用这个调用序列,并使其只执行一次: 然后:(1)进行fo

  • 我的设置是cloudflare- 这是nginx为websocket连接记录的内容:162.158。75.125--[29/Oct/2016:00:01:47 0000]“GET/HTTP/1.1”101 1047-“Mozilla/5.0(X11;Linux x86_64)AppleWebKit/537.36(KHTML,如Gecko)Chrome/53.0.2785.143 Safari/53

  • 想通过坐标的形式标记点,但是断了的地方不要自动连接点,比如Mon和Wed不应该连接起来,因为Tue没有对应值 使用了connectNulls设置为false也不可以 不知道有没有什么设置可以达到这样的效果,还是必须手动补充null值 因为实际情况下横坐标是以秒为单位的时间戳,每一秒对应一个数据值,如果手动补充null值,效率有点低

  • 问题内容: 我正在使用POST方法。我需要创建一次,并且应该使用Keep Alive Connection。但是我认为,它每次都会建立一个新的连接。 因此,我需要使用 保持活动 连接。 这是我的代码段,很多帮助将不胜感激。 而且logcat日志是: 问题答案: 10:07:29.746:D / org.apache.http.headers(1529):>>连接:保持活动 您正在要求保持活动状态。