我正在尝试订阅reservoir websocket api https://docs.reservoir.tools/reference/websockets并且我创建了一个自定义反应钩子来订阅和取消订阅某些事件
import {useCallback,useEffect,useState} from "react";
const API_KEY = process.env.NEXT_PUBLIC_RESERVOIR_API_KEY ?? ''
const useReservoirWebSocket = () => {
const [socket,setSocket] = useState<WebSocket|null>(null)
useEffect(() => {
const newSocket = new WebSocket(`wss://ws.ws-sepolia.reservoir.tools`);
newSocket.onopen = () => {
console.log('Socket connected')
setSocket(newSocket);
newSocket.onmessage = (event) => {
console.log('Message received: ', event.data);
};
}
newSocket.onerror = (error) => {
console.log('Connection error', error)
}
newSocket.onclose = () => {
setSocket(null)
}
return () => {
newSocket.close();
}
},[])
const subscribe = useCallback((event:string, payload={}) => {
if(socket) {
socket?.send(JSON.stringify({
type:'subscribe',
event,
...payload
}))
}
},[socket])
const unsubscribe = useCallback((event:string,payload={}) => {
if(socket) {
socket?.send(JSON.stringify({type:'unsubscribe',event,...payload}))
}
},[socket])
return {subscribe, unsubscribe, socket}
}
export default useReservoirWebSocket
但是连接永远无法通过。
任何提示将不胜感激。
您遇到的错误“与 'wss://ws.ws-sepolia.reservoir.tools' 的 WebSocket 连接失败”表示与 WebSocket 服务器建立连接时出现问题。
此错误的原因之一可能是 WebSocket URL 不正确。从文档中我们可以看到,在创建 WebSocket 实例时您需要将 API_KEY 作为连接 url 中的查询参数传递。
const newSocket = new WebSocket(`wss://ws.ws-sepolia.reservoir.tools?api_key=${API_KEY}`);
在给定的代码中,您没有在连接 URL 中提供 API_KEY。这可能是错误的原因。现在尝试使用上述语法创建 websocket 实例并检查它是否有效。