Suscripciones WebSocket
Suscríbete a cambios de cuenta, registros de transacciones y confirmación de firmas a través de JSON-RPC de Solana WebSocket.
Receta
Tarjeta de receta de referencia rápida - lista para copiar y pegar.
import { createSolanaRpcSubscriptions, address } from "@solana/kit";
const rpcSubscriptions = createSolanaRpcSubscriptions(
"wss://api.devnet.solana.com"
);
const abort = new AbortController();
const accountNotifications = await rpcSubscriptions
.accountNotifications(address("YOUR_ACCOUNT"), { commitment: "confirmed" })
.subscribe({ abortSignal: abort.signal });
for await (const notification of accountNotifications) {
console.log(notification.value.lamports);
}Cuándo usar esto:
- Actualizaciones en vivo del saldo de la billetera sin sondeo.
- Esperando la confirmación de la transacción en la interfaz de usuario.
- Transmitiendo registros de programas para un filtro de mención específico.
- Creando paneles reactivos.
Ejemplo de Trabajo
import {
createSolanaRpcSubscriptions,
address,
} from "@solana/kit";
const rpcSubscriptions = createSolanaRpcSubscriptions(
"wss://api.devnet.solana.com"
);
async function watchSignature(signature: string) {
const abort = new AbortController();
const sigNotifications = await rpcSubscriptions
.signatureNotifications(signature, { commitment: "confirmed" })
.subscribe({ abortSignal: abort.signal });
for await (const n of sigNotifications) {
if (n.value.err) {
console.error("falló", n.value.err);
} else {
console.log("confirmado");
}
abort.abort();
break;
}
}
watchSignature("YOUR_TX_SIGNATURE");Lo que esto demuestra:
signatureNotificationsse resuelve cuando la transacción alcanza el compromiso.accountNotificationsenvía el nuevo estado de la cuenta al escribir.AbortControllerlimpia las suscripciones al desmontar.
Inmersión Profunda
Cómo Funciona
- El cliente abre WebSocket, envía el método JSON-RPC
*Subscribe, recibe mensajes push*Notification. - Cada suscripción tiene un id para
*Unsubscribe. - El compromiso en la suscripción controla el tiempo de las notificaciones.
- Los puntos finales WSS del proveedor pueden requerir parámetros de consulta de clave API.
Tipos de Suscripción
| Método | Se dispara cuando |
|---|---|
accountSubscribe | Cambian los lamports/datos de la cuenta |
logsSubscribe | La transacción menciona un programa/cuenta |
signatureSubscribe | La transacción alcanza el compromiso |
slotSubscribe | Se procesa una nueva ranura |
Notas de TypeScript
// Suscripción de logs con filtro de menciones (el soporte del proveedor varía)
// Usa rpcSubscriptions.logsNotifications({ mentions: [programId] })Errores Comunes
- URL HTTP en cliente WebSocket - la conexión falla. Solución: usa el punto final
wss://de la documentación del proveedor. - Fugas de suscripción - las pestañas abiertas acumulan carga del servidor. Solución: abortar al desmontar el componente y cambiar de ruta.
- Retroceso de notificaciones procesadas - la interfaz de usuario muestra éxito y luego revierte. Solución: suscribirse en
confirmedofinalized. - Límites de tasa WSS públicos - conexiones caídas bajo carga. Solución: nivel de proveedor con límites de suscripción más altos.
- Asumir ordenación entre cuentas - las notificaciones son por suscripción. Solución: diseñar fusiones de UI idempotentes.
Alternativas
| Alternativa | Usar cuándo | No usar cuándo |
|---|---|---|
| Sondeo HTTP | Actualizaciones raras, sin servidor | Reactividad de UI sub-segundo |
| Yellowstone gRPC | Rendimiento del indexador | Aplicación de billetera simple |
| Webhooks (Helius) | Ingesta del lado del servidor | Cliente de navegador puro |
solana logs CLI | Depuración del desarrollador | Funciones de usuario de producción |
Preguntas Frecuentes
¿Qué URL WSS para devnet?
A menudo wss://api.devnet.solana.com - confirma con tu proveedor; puede diferir del host HTTPS.
¿Cuántas suscripciones por conexión?
Específico del proveedor - agrupa cuentas relacionadas o usa un indexador del lado del servidor para cientos.
¿El kit 7.0.0 soporta suscripciones de logs?
Usa las API de notificación de logs de createSolanaRpcSubscriptions - consulta la documentación del kit para conocer los nombres exactos de los métodos en tu versión fijada.
¿Las suscripciones funcionan en localnet?
Sí - ws://127.0.0.1:8900 o el puerto WS local documentado por el proveedor mientras se ejecuta el validador de prueba.
¿Cómo me desuscribo?
Aborta el iterador asíncrono o llama a unsubscribe RPC con el id de suscripción de los internos del kit.
¿Por qué notificaciones duplicadas?
La cuenta puede cambiar varias veces por ranura - deduplica por ranura o igualdad de lamports en la UI.
¿signatureSubscribe vs sondeo getSignatureStatuses?
Subscribe tiene menor latencia y menos carga RPC que los bucles de sondeo ajustados.
¿Las suscripciones funcionan en entornos sin servidor?
Mal ajuste - las conexiones son de larga duración; usa webhooks o sondeo en entornos sin servidor.
¿Cómo funcionan las menciones de logsSubscribe?
Filtra a transacciones que referencian una clave pública de programa o cuenta - reduce el ruido.
¿Qué pasa con slotSubscribe?
Útil para relojes de UI impulsados por ranuras y para coordinar lecturas en los límites de las ranuras.
Relacionado
- Conceptos Básicos de RPC - HTTP vs WS
- Logs y Depuración - Flujo de logs de la CLI
- Webhooks - eventos del lado del servidor
- Proveedores RPC - Puntos finales WSS
Versiones de Stack: Esta página fue escrita para Agave 4.1.1, Solana CLI 3.0.10, Anchor 0.32.1, anchor-lang 0.32.1, Rust 1.91.1, @solana/kit 7.0.0, Surfpool 0.12.0, y LiteSVM 0.6.x.