A fast, well-tested and widely used WebSocket implementation for Go.
Go to file
Gary Burd f0643a3a18
Improve protocol error messages
To aid protocol error debugging, report all errors found in the first two bytes of a message header.
2022-01-02 12:16:08 -08:00
.circleci Use context.Context in TLS handshake (#751) 2022-01-01 08:43:22 -08:00
.github Create release-drafter.yml (#538) 2019-08-24 18:20:11 -07:00
examples Update autobahn example 2022-01-02 11:21:21 -08:00
.gitignore add newline and remove extra space 2018-03-04 15:22:45 -08:00
AUTHORS Update LICENSE file to reflect Google employee contributions. 2018-06-05 13:25:52 -07:00
LICENSE Relicense to the Gorilla WebSocket Authors. 2014-04-18 14:25:11 -07:00
README.md Changed the link of API references to pkg.go.dev (#577) 2020-03-19 06:46:16 -07:00
client.go Use context.Context in TLS handshake (#751) 2022-01-01 08:43:22 -08:00
client_clone.go Update source to match output from gofmt 1.17 2021-12-17 22:48:51 -05:00
client_clone_legacy.go Update source to match output from gofmt 1.17 2021-12-17 22:48:51 -05:00
client_server_test.go Modify http Method String Literal to Variable (#728) 2021-12-19 11:21:45 -05:00
client_test.go Replace parseURL() with net/url.Parse() (#290) 2017-10-12 19:08:58 -07:00
compression.go fix flate write pool size to work with best compression 2017-01-25 02:15:04 +03:00
compression_test.go Add write buffer pooling 2018-08-22 14:11:59 -07:00
conn.go Improve protocol error messages 2022-01-02 12:16:08 -08:00
conn_broadcast_test.go Fix broadcast benchmarks (#542) 2022-01-02 07:35:34 -08:00
conn_test.go Read Limit Fix (#537) 2019-08-24 18:17:28 -07:00
conn_write.go Update source to match output from gofmt 1.17 2021-12-17 22:48:51 -05:00
conn_write_legacy.go Update source to match output from gofmt 1.17 2021-12-17 22:48:51 -05:00
doc.go docs: Fix typo. (#568) 2020-03-19 10:45:00 -07:00
example_test.go Fix a couple of small typo's (#567) 2020-03-19 06:49:51 -07:00
go.mod Read Limit Fix (#537) 2019-08-24 18:17:28 -07:00
go.sum build: clean up go.sum (#584) 2020-03-19 10:50:51 -07:00
join.go Add JoinMessages 2019-02-04 16:42:47 -08:00
join_test.go Add JoinMessages 2019-02-04 16:42:47 -08:00
json.go Misc cleanup 2017-07-18 13:21:30 -07:00
json_test.go Add write buffer pooling 2018-08-22 14:11:59 -07:00
mask.go Update source to match output from gofmt 1.17 2021-12-17 22:48:51 -05:00
mask_safe.go Update source to match output from gofmt 1.17 2021-12-17 22:48:51 -05:00
mask_test.go miscellaneous cleanup 2018-08-24 14:03:26 -07:00
prepared.go Use empty struct to protect writing (#566) 2020-03-19 06:52:00 -07:00
prepared_test.go Add write buffer pooling 2018-08-22 14:11:59 -07:00
proxy.go Modify http Method String Literal to Variable (#728) 2021-12-19 11:21:45 -05:00
server.go Modify http Method String Literal to Variable (#728) 2021-12-19 11:21:45 -05:00
server_test.go Modify http Method String Literal to Variable (#728) 2021-12-19 11:21:45 -05:00
tls_handshake.go Use context.Context in TLS handshake (#751) 2022-01-01 08:43:22 -08:00
tls_handshake_116.go Use context.Context in TLS handshake (#751) 2022-01-01 08:43:22 -08:00
util.go Improve header parsing code 2018-10-06 11:35:33 -04:00
util_test.go Improve header parsing code 2018-10-06 11:35:33 -04:00
x_net_proxy.go Add SOCKS5 support 2017-11-30 17:43:01 -08:00

README.md

Gorilla WebSocket

GoDoc CircleCI

Gorilla WebSocket is a Go implementation of the WebSocket protocol.

Documentation

Status

The Gorilla WebSocket package provides a complete and tested implementation of the WebSocket protocol. The package API is stable.

Installation

go get github.com/gorilla/websocket

Protocol Compliance

The Gorilla WebSocket package passes the server tests in the Autobahn Test Suite using the application in the examples/autobahn subdirectory.

Gorilla WebSocket compared with other packages

github.com/gorilla golang.org/x/net
RFC 6455 Features
Passes Autobahn Test SuiteYesNo
Receive fragmented messageYesNo, see note 1
Send close messageYesNo
Send pings and receive pongsYesNo
Get the type of a received data messageYesYes, see note 2
Other Features
Compression ExtensionsExperimentalNo
Read message using io.ReaderYesNo, see note 3
Write message using io.WriteCloserYesNo, see note 3

Notes:

  1. Large messages are fragmented in Chrome's new WebSocket implementation.
  2. The application can get the type of a received data message by implementing a Codec marshal function.
  3. The go.net io.Reader and io.Writer operate across WebSocket frame boundaries. Read returns when the input buffer is full or a frame boundary is encountered. Each call to Write sends a single frame message. The Gorilla io.Reader and io.WriteCloser operate on a single WebSocket message.