Twitter/X 使用 WebSocket 吗?开发者技术指南

关于 Twitter 流式协议的技术真相,为何对实时应用重要,以及 WebSocket 推送的对比。

简短回答:不,Twitter 不使用 WebSocket

官方 X(Twitter)API 的流式端点不使用 WebSocket。而是使用 HTTP 流式传输 — 一种长连接 HTTP 请求,服务器通过分块传输编码逐步发送数据。这与 WebSocket(RFC 6455)是根本不同的协议。

这个区别对构建实时应用的开发者很重要。你使用的协议会影响延迟、重连行为、双向通信以及客户端代码架构。

Twitter 的 HTTP 流式传输实际如何工作

连接到 X API 的过滤流端点(GET /2/tweets/search/stream)时,客户端发起标准 HTTP 请求。服务器响应 200 状态码并开始逐行写入 JSON — 每条推文一行,无限持续。可以理解为下载一个无限长的文件。

在推文之间,X 大约每 20 秒发送保活信号(空行)。如果客户端超过 20 秒未收到数据,应假定连接中断并重新连接。

  • 协议:HTTP/1.1 分块传输编码
  • 数据格式:换行分隔的 JSON(NDJSON)
  • 方向:仅服务器到客户端(单向)
  • 保活:约每 20 秒一个空行
  • 认证:HTTP Authorization 头中的 Bearer token
  • 连接:一个长连接 HTTP 响应,永不关闭(直到错误或断开)

WebSocket 与 HTTP 流式传输的区别

WebSocket(RFC 6455)是一个独立协议,以 HTTP 升级请求开始,然后切换为帧化的双向通信通道。与 HTTP 流式传输不同,WebSocket 在同一连接上支持服务器到客户端和客户端到服务器的消息。

特性HTTP 流式传输(X API)WebSocket(RFC 6455)
初始握手标准 HTTP 请求HTTP 升级 → ws:// 协议切换
方向仅服务器 → 客户端双向
数据帧换行分隔的块带长度头的二进制/文本帧
保活空行(约 20 秒)Ping/Pong 帧(协议内置)
客户端可发送数据否(需新 HTTP 请求)是(同一连接)
断连检测基于超时(手动)关闭帧 + ping/pong(自动)
浏览器支持需要 ReadableStream API原生 WebSocket API
重连需手动实现库自动处理

为什么这对实时应用很重要

对于交易机器人和提醒系统,协议选择有实际影响:

  • 延迟:两种协议原始延迟相似。区别在于开销 — WebSocket 帧有 2-14 字节开销,而 HTTP 分块编码的开销是可变的。
  • 重连:HTTP 流式传输没有内置机制检测中断连接。你必须实现超时逻辑。WebSocket 的 ping/pong 协议自动处理。
  • 双向:使用 HTTP 流式传输时,订阅新账号或更改过滤条件需要单独的 HTTP 请求。使用 WebSocket,你可以在同一连接上发送订阅变更。
  • 浏览器兼容性:HTTP 流式传输需要 ReadableStream API 进行增量解析。WebSocket 有原生浏览器支持和更简单的 API。
  • 基础设施:HTTP 流式连接可能被期望标准请求/响应模式的代理、负载均衡器和 CDN 中断。WebSocket 连接专为长连接设计。

代码对比:HTTP 流式传输 vs WebSocket

// HTTP streaming — X API filtered stream
const needle = require('needle');

const STREAM_URL = 'https://api.x.com/2/tweets/search/stream';

function connect() {
  const stream = needle.get(STREAM_URL, {
    headers: { Authorization: `Bearer ${BEARER_TOKEN}` },
  });

  // Must parse incrementally — standard fetch() won't work
  stream.on('data', (chunk) => {
    const line = chunk.toString().trim();
    if (!line) return; // Keep-alive newline
    const tweet = JSON.parse(line);
    console.log(tweet.data.text);
  });

  // No built-in reconnect — you must handle this yourself
  stream.on('error', () => {
    console.error('Connection lost, reconnecting...');
    setTimeout(connect, 5000);
  });
}

connect();
// WebSocket — TweetStream (from $199/mo)
function connect() {
  const ws = new WebSocket('wss://ws.tweetstream.io/ws', [
    'tweetstream.v1',
    `tweetstream.auth.token.${API_KEY}`,
  ]);

  ws.onmessage = (event) => {
    const envelope = JSON.parse(event.data);
    if (envelope.t === 'tweet' && envelope.op === 'content') {
      console.log(envelope.d.text);
      // Enrichment data (tokens, OCR, prices) in meta messages
    }
  };

  // Reconnect in application code when the socket closes
  ws.onclose = () => {
    console.log('Reconnecting...');
    setTimeout(connect, 1000);
  };
}

connect();

WebSocket 服务作为 Twitter 流式替代方案

多个第三方服务通过真正的 WebSocket 连接中继 Twitter 数据,弥合了 Twitter HTTP 流式传输与大多数实时应用偏好的 WebSocket 协议之间的差距。

例如 TweetStream 在服务器端连接 Twitter 数据源,并通过标准 WebSocket 连接将推文提醒推送到你的应用。这让你使用熟悉的 WebSocket API(onopen、onmessage、onclose)加上 OCR、代币检测和实时价格等富化数据。

  • 标准 WebSocket API — 无需 HTTP 流式传输解析
  • 自动重连与消息缓冲
  • 约 200 毫秒推送延迟(含富化处理)
  • 起步 $199/月
  • 双向:在同一连接上订阅账号和更改过滤条件

常见问题

TweetStream 团队

最近更新:2026 年 4 月

立即开启实时 Twitter WebSocket 提醒

内置 WebSocket 交付、OCR 与代币检测的 Twitter API 替代方案。

开始 7 天试用

起价 $199/月 · Basic/Elite 含 7 天试用 · OCR + 代币检测

相关页面