隆重推出:下一代增强型 WebSockets

  • Helius
  • 发布于 1天前
  • 阅读 38

Helius宣布其增强型 WebSocket 现在由 LaserStream 提供支持,LaserStream 是一个为速度、简单性和容错能力而构建的下一代 gRPC 流服务。此集成在 JSON 原生格式中为 WebSocket 流提供 gRPC 级别的可靠性,消除了脆弱的连接,并使前端开发人员能够专注于提供最佳用户体验。

实时数据流对于在Solana上构建响应式应用程序至关重要。长期以来,WebSockets一直是实现持久、双向通信的首选协议,它用单一连接取代了效率低下的HTTP轮询。

虽然WebSockets比传统的HTTP轮询更理想,但它们也带来了一系列挑战,这些挑战可能会损害可靠性,这在Solana等高吞吐量环境中是有害的。从随机断开连接到不充分的过滤等问题,一直迫使开发人员投入大量时间和精力进行自定义缓解,这通常以牺牲核心产品创新为代价。

在Helius,我们长期以来一直认识到这些痛点。过去,我们推出了增强型WebSockets,这是一种更快、更可定制的流式传输交易和帐户更新的选项。然而,随着我们基础设施的发展,我们清楚地认识到,即使是这些增强功能,仍然无法达到Helius所能实现的弹性和性能。

我们很高兴地宣布,增强型WebSockets现在由与LaserStream相同的基础设施提供支持,LaserStream是我们为速度、简便性和容错性而构建的下一代gRPC流服务。

这种集成将gRPC级别的可靠性提供给JSON原生格式的WebSocket流,消除了脆弱的连接,并使前端开发人员能够专注于提供尽可能最佳的UX

WebSockets和实时应用程序的挑战

WebSockets承诺持久、双向的魔力——用一个连接代替不断轮询的HTTP端点来实现推送通知。虽然这听起来不错,但WebSockets并非没有问题:

1. 连接脆弱性和重负载

WebSockets维护有状态的、长期的TCP连接。这使得它们容易受到网络故障、代理超时或服务器过载的干扰。

Solana400msSlot时间和突发流量放大了WebSocket漏洞。因此,开发人员被迫实施自定义重新连接逻辑,例如指数退避和心跳ping,以保持正常运行时间。

2. 数据泛滥

WebSocket订阅通常返回太多数据

本机订阅,例如accountSubscribe,提供未经过滤的流,使开发人员不堪重负。这迫使开发人员在客户端进行过滤,这可能会增加带宽使用并导致处理延迟。

3. 可扩展性和资源开销

处理数千个并发连接会给服务器资源带来压力,从而导致内存泄漏、CPU瓶颈、负载均衡器复杂性增加以及分片连接以管理负载的需求。

水平扩展WebSockets是出了名的困难,而且不是大多数团队有时间、资源或专业知识来完善的事情。

4. 从产品创新中抽走开发人员的时间

总的来说,这些挑战夺走了构建新的、差异化功能和应用程序的周期。这种低效率是对Solana快速发展领域的一种隐性税。

这些持续存在的挑战使得标准Solana WebSockets不足以用于生产级应用程序,即使是最短暂的中断也可能意味着错失机会或过时的UI。

下一代增强型WebSockets

我们推出了增强型WebSockets——Solana标准WebSocketsGeyser增强版,用于更好地进行帐户和交易订阅——以解决这些差距。

它引入了强大的过滤器(例如,通过accountIncludeaccountExcludeaccountRequired最多50,000个地址)以及比传统WebSockets更快的响应时间。但是,自最初发布以来,我们的数据流基础设施已得到改善。

增强型WebSockets现在由与LaserStream相同的基础设施提供支持——LaserStream是我们下一代gRPC流服务,专为速度、可靠性和简便性而构建。

现在,在WebSocket包装器中体验gRPC可靠性。

主要增强功能包括:

一流的弹性

增强型WebSockets现在可以从多个聚合节点同时进行流式传输,并具有自动故障转移功能,从而消除了任何单点故障并确保了最长的运行时间,从而提高了弹性。

高性能

LaserStream专门用于超低延迟数据流,现在,增强型WebSockets将受益于我们的最新改进,以实现最快的通知。

前端优化的流

增强型WebSocketsJSON有效负载(由升级的基础设施支持)使前端开发人员能够将高保真流直接集成到浏览器、React应用程序和移动客户端中。

选择正确的流解决方案:一个比较

在Helius,我们有针对特定用例构建的不同数据流服务,我们在下面进行了概述。

增强型WebSockets

在以下情况下,开发人员应使用增强型WebSockets

  1. 延迟、连续性和正确性不影响损益、成交或风险
  2. 当你想要JSON有效负载时
  3. 你的重点是在不增加后端复杂性的情况下改善消费者UX
用例 示例
前端实时UX - 钱包余额<br>- 投资组合仪表板<br>- 应用内通知<br>- 消费者UX

LaserStream

在以下情况下,开发人员应使用LaserStream

  1. 每一毫秒都很重要
  2. 延迟、连续性和正确性会影响损益、成交和/或风险
  3. 你需要更高级的过滤功能
  4. 你需要具有自动重放功能的无间隙交付
  5. 你需要在各种承诺级别接收交易
用例 示例
后端事件驱动处理 - 交易和风险系统<br>- 价格和订单流监控器<br>- 清算观察器<br>- 跨场所引擎

Shred交付

在以下情况下,开发人员应使用Shred交付

  1. 你需要原始信号
  2. 拥有或可以构建自定义的脱片管道
用例 示例
超低延迟信号捕获 - 高频交易<br>- 跨场所套利<br>- Token狙击

总而言之:

  • 对于前端友好的非关键流,请使用增强型Websockets。
  • 对于延迟间隙或数据连续性直接影响机会的后端决策循环,请使用LaserStream。
  • 当你使用自定义脱片管道从原始碎片中获取最早的信号时,请使用Shred交付。

增强型WebSockets快速入门

开始使用增强型WebSockets非常简单。

首先,注册并在“API密钥”部分获取API密钥。

只需连接到我们的一个端点,通过transactionSubscribeaccountSubscribe进行订阅,然后开始接收经过过滤的弹性流。

备注:

增强型WebSockets适用于企业计划及以上。Solana标准WebSockets可用于免费和付费计划。

端点

  • 主网:wss://atlas-mainnet.helius-rpc.com/?api-key=&lt;YOUR_API_KEY>
  • 开发网:wss://atlas-devnet.helius-rpc.com/?api-key=&lt;YOUR_API_KEY>

示例:监控新的Raydium Launchpad池

以下Node.js脚本是一个简单的示例,说明如何在生产环境中使用增强型WebSockets,使用transactionSubscribe订阅RaydiumLaunchpad程序,并通过日志解析来过滤成功的池初始化:

import WebSocket from 'ws';

const API_KEY = process.env.HELIUS_API_KEY; // 将你的API密钥设置为环境变量
const WS_URL = `wss://atlas-mainnet.helius-rpc.com/?api-key=${API_KEY}`;
const
RAYDIUM_LAUNCHPAD_PROG
= '
LanMV9sAd7wArD4vJFi2qDdfnVhFxYSUg6eADduJ3uj
';

const ws = new WebSocket(WS_URL);

ws.on('open', () => {
  console.log('Connected to LaserStream-Powered Enhanced WebSockets!');
  ws.send(JSON.stringify({
    jsonrpc: '2.0',
    id: 1,
    method: 'transactionSubscribe',
    params: [\
      {\
        failed: false,\
        accountInclude: [\
RAYDIUM_LAUNCHPAD_PROG\
]\
      },\
      {\
        commitment: 'confirmed',\
        encoding: 'jsonParsed',\
        transactionDetails: 'full',\
        maxSupportedTransactionVersion: 0\
      }\
    ]
  }));

  // 可选的心跳ping
  setInterval(() => {
    if (ws.readyState === WebSocket.OPEN) {
      ws.send(JSON.stringify({ jsonrpc: '2.0', id: Date.now(), method: 'ping' }));
    }
  }, 30000);
});

ws.on('message', (data) => {
  try {
    const payload = JSON.parse(data.toString());
    const result = payload.params?.result;
    if (!result) return;

    // 过滤初始化日志
    const logs = result.transaction.meta.logMessages || [];
    if (!logs.some(log => log.includes('Instruction: Initialize'))) return;

 const keys = result.transaction.transaction.message.accountKeys.map(k => k.pubkey);
    console.table({
      Signature: result.signature,
      Creator: keys[1],  // 来自IDL:accounts[1]是创建者
      BaseMint: keys[7], // 来自IDL:base_mint在初始化帐户中位于索引7附近
      Slot: result.slot
    });

  } catch (err) {
    console.error('Message parse error:', err);
  }
});

ws.on('error', (err) => console.error('WebSocket error:', err));
ws.on('close', () => {
  console.log('Disconnected');
});

使用以下命令运行上面的代码:

export HELIUS_API_KEY=your-api-key-here
node raydium-launchpad-stream.js

以下脚本会将一个新启动的池的表流式传输到控制台,即使在高负载下也能确保无间隙交付。

定价和计量

作为我们持续投资于延迟和可靠性的一部分,从2025年10月16日开始,新计划将按照与LaserStream相同的费率计量增强型WebSockets(即,每0.1 MB流式传输的数据3个积分)。

专业版计划可以按固定费率购买额外的数据,这些数据可用于增强型WebSockets或LaserStream的数据流需求。

如果你使用现有计划,则你的定价、限制和账单完全保持不变。无需采取任何措施。

标准WebSockets保持不变,可用于免费和付费计划。

立即提升你的流

可靠性、性能和简便性——你的流已准备好与你一起扩展。立即开始使用增强型WebSockets进行构建。注册,获取API密钥,并在你的前端体验可靠性。

更智能地流式传输,更快地创新。

  • 原文链接: helius.dev/blog/introduc...
  • 登链社区 AI 助手,为大家转译优秀英文文章,如有翻译不通的地方,还请包涵~
点赞 0
收藏 0
分享
本文参与登链社区写作激励计划 ,好文好收益,欢迎正在阅读的你也加入。

0 条评论

请先 登录 后评论
Helius
Helius
https://www.helius.dev/