websocket provides high- and low-level bindings for the browser's WebSocket API.
Switch branches/tags
Nothing to show
Clone or download
johanbrandhorst and dmitshur websocketjs: Use Normal Closure (1000) close code in WebSocket.Close. (
…#22)

When no status code is provided, the receiving side can interpret that
to be status code 1005, indicating that the websocket was closed with
no status code.

In the case of the Close function, the user has requested a termination
of the websocket and the status code should indicate that.
Latest commit 87ee476 May 22, 2017

README.md

websocket

GoDoc

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.
if err != nil {
	// handle error
}

buf := make([]byte, 1024)
n, err = conn.Read(buf) // Blocks until a WebSocket frame is received.
doSomethingWithData(buf[:n])
if err != 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.
if err != 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()
// ...