Packages websocket and websocketjs provide high- and low-level bindings for the browser's WebSocket API (respectively).
The high-level bindings offer a Dial function that returns a regular net.Conn. It can be used similarly to net package.
conn, err:=websocket.Dial("ws://localhost/socket") // Blocks until connection is established.iferr!=nil {
// handle error
}
buf:=make([]byte, 1024)
n, err=conn.Read(buf) // Blocks until a WebSocket frame is received.doSomethingWithData(buf[:n])
iferr!=nil {
// handle error
}
_, err=conn.Write([]byte("Hello!"))
// ...err=conn.Close()
// ...The low-level bindings work with typical JavaScript idioms, such as adding event listeners with callbacks.
ws, err:=websocketjs.New("ws://localhost/socket") // Does not block.iferr!=nil {
// handle error
}
onOpen:=func(ev*js.Object) {
err:=ws.Send([]byte("Hello!")) // Send a binary frame.// ...err:=ws.Send("Hello!") // Send a text frame.// ...
}
ws.AddEventListener("open", false, onOpen)
ws.AddEventListener("message", false, onMessage)
ws.AddEventListener("close", false, onClose)
ws.AddEventListener("error", false, onError)
err=ws.Close()
// ...nhooyr.io/websocket- WebSocket library with WebAssembly support.