⚡ بدء سريع (shreds خام)
يُسلّمُ Raw Shred Stream shreds Solana خامًا (raw shreds) إلى خادمِكَ كـ datagrams عبرَ UDP، مباشرةً إلى مُستقبِلِكَ الخاص. يربطُ هذا الدليلُ السريعُ مقبسَ UDP ويستقبلُ تلك الـ datagrams لتتأكدَ من تدفقِ البيانات. ومن هناك، يجري فكُّ الشذراتِ وإعادةُ التجميعِ وفكُّ ترميزِ المعاملاتِ في خطِّ المعالجةِ الخاصِّ بك — عبرَ مفكِّكِ ترميزٍ محسَّن، حفاظاً على ميزةِ زمنِ الاستجابة.
تريدُ الاستغناءَ عن مفكِّكِ الترميزِ كلياً؟ يُسلّمُكَ Decoded Shred Stream معاملاتٍ معادَ تجميعِها بالفعل بتنسيقِ wire القياسي. راجعْ بناء مستقبِل لخطِّ معالجةِ الشذراتِ الخام كاملاً.
📋 المتطلبات الأساسية
- أنشئ حساباً على ShredStream.com
- أطلق Raw Shred Stream واختر منطقتك
- أدخل عنوان IP لخادمك ومنفذ UDP الذي تريد استقبال الـ shreds عليه
- افتح firewall لحركة مرور UDP الواردة على ذلك المنفذ — راجع إعداد الشبكة
💻 اربطْ مقبسَ UDP واستقبلِ الشذرات
كل مثال يربط مقبس UDP على 0.0.0.0 ويستقبل shreds خامًا على المنفذ الذي كوّنته على ShredStream.com. الشذرات الواردة هي وحدات بايت Solana خام — مرّرها إلى خط فكّ التجميع وفكّ الترميز الخاص بك.
JavaScript / TypeScript
import dgram from 'node:dgram';const PORT = parseInt(process.env.SHREDSTREAM_PORT || '8080');const sock = dgram.createSocket('udp4');sock.on('message', (shred) => {// وحدات بايت shred سولانا الخام — مرّرها إلى أداة فك التجميع / فك الترميز لديك.console.log(`shred: ${shred.length} bytes`);});sock.bind(PORT, '0.0.0.0');
Python
import os, socketPORT = int(os.environ.get("SHREDSTREAM_PORT", 8080))sock = socket.socket(socket.AF_INET, socket.SOCK_DGRAM)sock.bind(("0.0.0.0", PORT))while True:shred, _ = sock.recvfrom(65535)# وحدات بايت shred سولانا الخام — مرّرها إلى أداة فك التجميع / فك الترميز لديك.print(f"shred: {len(shred)} bytes")
Rust
use std::net::UdpSocket;fn main() -> std::io::Result<()> {let port: u16 = std::env::var("SHREDSTREAM_PORT").ok().and_then(|v| v.parse().ok()).unwrap_or(8080);let sock = UdpSocket::bind(("0.0.0.0", port))?;let mut buf = [0u8; 65535];loop {let (n, _) = sock.recv_from(&mut buf)?;// وحدات بايت shred سولانا الخام — مرّرها إلى أداة فك التجميع / فك الترميز لديك.println!("shred: {} bytes", n);}}
Go
package mainimport ("fmt""net""os""strconv")func main() {port, _ := strconv.Atoi(os.Getenv("SHREDSTREAM_PORT"))if port == 0 {port = 8080}sock, err := net.ListenUDP("udp", &net.UDPAddr{IP: net.IPv4zero, Port: port})if err != nil {panic(err)}defer sock.Close()buf := make([]byte, 65535)for {n, _, _ := sock.ReadFromUDP(buf)// وحدات بايت shred سولانا الخام — مرّرها إلى أداة فك التجميع / فك الترميز لديك.fmt.Printf("shred: %d bytes\n", n)}}
عيّن SHREDSTREAM_PORT (أو عدّل القيمة الافتراضية 8080) على المنفذ الذي كوّنته لبثك في لوحة تحكم ShredStream.com.
هذه القصاصات تثبت وصول الـ datagrams فقط. الشذرات الخام لا تزال بحاجة إلى فكّ الشذرات (بنية FEC / Merkle) وإعادة تجميع الـ slots وفكّ ترميز المعاملات — وهذا خطُّ المعالجة الذي تبنيه أنت. للاستغناء عنه كلياً، راجع Decoded Shred Stream: تصلك المعاملات معاد تجميعها بالفعل.
🧩 العميل القديم: shredstream
تنبيه: لم يعد يُنصح باستخدام عميلنا في الحالات الحساسة لزمن الاستجابة. لذا فضّل استخدام عميل آخر، أو خدمتنا Decoded Shred Stream مباشرةً.
إن كنت بحاجة إلى حلّ يعمل اليوم، فالعميل القديم shredstream يربط المنفذ، ويفكّ الشذرات ويعيد تجميعها على جانب العميل، ويسلّمك معاملات Solana جاهزة. فكّ الشذرات على جانب العميل يكلّف زمن استجابة — مناسب للبدء، لا للمنافسة على زمن الاستجابة.
| اللغة | التثبيت | الحزمة |
|---|---|---|
| JavaScript / TypeScript | npm install shredstream | npm |
| Python | pip install shredstream | PyPI |
| Rust | cargo add shredstream | crates.io |
| Go | go get github.com/shredstream/shredstream-sdk-go/v2 | GitHub |
// cargo add shredstreamuse shredstream::ShredListener;fn main() {let port: u16 = std::env::var("SHREDSTREAM_PORT").ok().and_then(|v| v.parse().ok()).unwrap_or(8001);let mut listener = ShredListener::bind(port).expect("bind");// Client-side deshredding → ready Solana transactionsfor (slot, transactions) in listener.transactions() {for tx in &transactions {println!("slot {}: {}", slot, tx.signatures[0]);}}}
⚙️ ضبط buffer نظام التشغيل
مدققو Solana ينتجون الـ shreds بمعدل عالٍ. اطلب مخزن استقبال socket سخياً (25 ميغابايت على الأقل) في كود مستقبِلك، واسمح بهذا الحجم على مستوى نظام التشغيل:
# Linuxsudo sysctl -w net.core.rmem_max=33554432# macOSsudo sysctl -w kern.ipc.maxsockbuf=33554432
راجع إعداد الشبكة لتكوين firewall وbuffer الكامل.
➡️ الخطوات التالية
- بناء مستقبِل — ما يتطلبه خط معالجة الشذرات الخام كاملاً، ومتى يكون Decoded Shred Stream الخيار الأنسب
- إعداد الشبكة — تكوين firewall ومستوى نظام التشغيل
- أفضل الممارسات — المراقبة والتكرار والأداء
- استكشاف الأخطاء وإصلاحها — المشاكل الشائعة والحلول