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 states discards the message data. Use a BufferedSocket to buffer writes to be sent 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 that maintain an internal state machine, managing reconnects and preventing writes to closed sockets. However, sometimes we need direct access to an open WebSocket in async functions.
Asynchronously connects to a web socket port or fails after a timeout. The
socket is open, and writable with send, when its promise is fulfilled.
Returns a Promise fulfilled with an open WebSocket or rejected with a
connection 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 connections with exponential backoff. Returns a Promise fulfilled with an open WebSocket or 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)}npm install
npm test
Distributed under the MIT license. See LICENSE for details.