A web socket that reconnects.
$ npm install @github/stable-socket
import{StableSocket}from'@github/stable-socket'constdelegate={socketDidOpen(socket:Socket){// Socket is ready to write.socket.send('Hello')},socketDidClose(socket:Socket,code?:number,reason?:string){// Socket closed and will retry the connection.},socketDidFinish(socket:Socket){// Socket closed for good and will not retry.},socketDidReceiveMessage(socket:Socket,message:string){// Socket read data from the connection.},socketShouldRetry(socket:Socket,code:number):boolean{// Socket reconnects unless server returns the policy violation code.returncode!==1008}}constpolicy={timeout:4000,attempts:Infinity,maxDelay:60000}consturl='wss://live.example.com'constsocket=newStableSocket(url,delegate,policy)socket.open()
Writing to a StableSocket while it is in the opening or closed statesdiscards the message data. Use a BufferedSocket to buffer writes to besent when it opens.
import{BufferedSocket,StableSocket}from'@github/stable-socket'constsocket=newBufferedSocket(newStableSocket(url,delegate,policy))socket.open()socket.send('hello')// Will be sent when the socket is open.
StableSocket and BufferedSocket are abstractions over a WebSocket thatmaintain an internal state machine, managing reconnects and preventing writesto closed sockets. However, sometimes we need direct access to an open WebSocketin async functions.
Asynchronously connects to a web socket port or fails after a timeout. Thesocket is open, and writable withsend
, when its promise is fulfilled.Returns a Promise fulfilled with an open WebSocket or rejected with aconnection failure.
import{connect}from'@github/stable-socket'try{constsocket=awaitconnect('wss://live.example.com',100)socket.send('hi')}catch(e){console.log('Socket connection failed',e)}
Asynchronously connects to a web socket port, retrying failed connectionswith exponential backoff. Returns a Promise fulfilled with an open WebSocketor rejected with a connection failure.
import{connectWithRetry}from'@github/stable-socket'try{constpolicy={timeout:100,attempts:Infinity,maxDelay:60000}constsocket=awaitconnectWithRetry('wss://live.example.com',policy)socket.send('hi')}catch(e){console.log('Socket connection failed',e)}
Distributed under the MIT license. See LICENSE for details.