断开连接时自动重播
LaserStream 客户端通过槽号持续跟踪您的流媒体位置。如果发生断开连接——无论是由于网络问题、服务器维护还是其他原因——客户端会自动重新连接并从您上次处理的槽位恢复流媒体。您永远不会丢失数据,永远不会错过交易,也不需要编写重新连接逻辑。
JavaScript/TypeScript 客户端
我们强烈建议为 JavaScript 应用切换到 LaserStream SDK。 如果您当前使用 Yellowstone gRPC 客户端,您将会遇到逐渐增加的流延迟和性能瓶颈,这些问题会随着时间的推移而加剧。LaserStream 客户端的性能余量确保您的应用可以随网络扩展,并完全消除这些问题。
JavaScript 客户端 使用原生 Rust 绑定实现 1.3GB/s 的吞吐量——比 Yellowstone gRPC JavaScript 客户端的最大 30MB/s 快 40 倍以上。
4倍更快的事件检测:得益于其基于Rust的架构,LaserStream JavaScript客户端接收和处理事件的速度比Yellowstone客户端快4倍,使您的应用程序在事件检测上具有显著的竞争优势。
在高带宽订阅中,Yellowstone客户端会经历随时间累积的渐进延迟。LaserStream则无论数据量如何,始终保持一致的低延迟流传输。
npm install helius-laserstream
快速开始
import { subscribe, CommitmentLevel, LaserstreamConfig, SubscribeRequest } from 'helius-laserstream';
async function streamTransactions() {
const config: LaserstreamConfig = {
apiKey: 'YOUR_API_KEY',
endpoint: 'https://laserstream-mainnet-ewr.helius-rpc.com',
};
const request: SubscribeRequest = {
transactions: {
client: {
accountInclude: ['JUP6LkbZbjS1jKKwapdHNy74zcZ3tLUZoi5QNyVTaV4'], // Jupiter Program
accountExclude: [],
accountRequired: [],
vote: false,
failed: false
}
},
commitment: CommitmentLevel.CONFIRMED,
accounts: {},
slots: {},
transactionsStatus: {},
blocks: {},
blocksMeta: {},
entry: {},
accountsDataSlice: []
};
// The SDK handles reconnection and replay automatically
await subscribe(config, request,
async (data) => {
console.log('New transaction:', data);
},
async (error) => {
console.error('Error:', error);
}
);
}
streamTransactions().catch(console.error);
可靠性比较
功能 | LaserStream | Yellowstone |
---|
自动重播 | ✅ 内置 | ❌ 需要手动实现 |
渐进延迟 | ❌ 无 | ✅ 在高带宽时 |
数据丢失保护 | ✅ 自动 | ❌ 应用程序负责 |
重新连接 | ✅ 无缝 | ❌ 无内置支持 |
Rust 客户端
Rust 客户端为需要最大控制的应用程序提供零拷贝反序列化和本地性能。
[dependencies]
helius-laserstream = "0.1"
tokio = { version = "1", features = ["full"] }
快速开始
use helius_laserstream::{subscribe, CommitmentLevel, LaserstreamConfig, SubscribeRequest};
use futures::StreamExt;
#[tokio::main]
async fn main() -> Result<(), Box<dyn std::error::Error>> {
let config = LaserstreamConfig {
api_key: "YOUR_API_KEY".to_string(),
endpoint: "https://laserstream-mainnet-ewr.helius-rpc.com".to_string(),
};
let request = SubscribeRequest {
transactions: Some(TransactionsFilter {
client: Some(TransactionFilter {
account_include: vec!["JUP6LkbZbjS1jKKwapdHNy74zcZ3tLUZoi5QNyVTaV4".to_string()],
vote: false,
failed: false,
..Default::default()
}),
}),
commitment: CommitmentLevel::Confirmed,
..Default::default()
};
let mut stream = subscribe(config, request).await?;
while let Some(result) = stream.next().await {
match result {
Ok(data) => println!("New transaction: {:?}", data),
Err(e) => eprintln!("Error: {:?}", e),
}
}
Ok(())
}
Go 客户端
Go 客户端提供惯用的Go接口。
go get github.com/helius-labs/laserstream-sdk/go
快速开始
package main
import (
"context"
"fmt"
"log"
laserstream "github.com/helius-labs/laserstream-sdk/go"
)
func main() {
config := &laserstream.Config{
APIKey: "YOUR_API_KEY",
Endpoint: "https://laserstream-mainnet-ewr.helius-rpc.com",
}
request := &laserstream.SubscribeRequest{
Transactions: &laserstream.TransactionsFilter{
Client: &laserstream.TransactionFilter{
AccountInclude: []string{"JUP6LkbZbjS1jKKwapdHNy74zcZ3tLUZoi5QNyVTaV4"},
Vote: false,
Failed: false,
},
},
Commitment: laserstream.CommitmentConfirmed,
}
ctx := context.Background()
stream, err := laserstream.Subscribe(ctx, config, request)
if err != nil {
log.Fatal(err)
}
for data := range stream {
if data.Error != nil {
log.Printf("Error: %v", data.Error)
continue
}
fmt.Printf("New transaction: %+v\n", data)
}
}
为什么从Yellowstone迁移到LaserStream
Yellowstone 客户面临的关键限制将随着 Solana 的扩展而恶化:
- 性能瓶颈:Yellowstone JavaScript 客户端的最大速度为 30MB/s——对于高吞吐量应用程序来说不够
- 渐进延迟:在高带宽订阅中,延迟会随着时间的推移而累积
- 手动重播:您必须实现自己的重新连接和重播逻辑
- 数据丢失风险:没有内置重播,网络中断意味着错过交易
LaserStream 解决了这些问题。凭借 40 倍的性能提升、自动重播和零数据丢失保证,迁移到 LaserStream 确保您的应用程序在 Solana 发展时保持竞争力。