A fast, well-tested and widely used WebSocket implementation for Go.
Go to file
LiuYang 80393295c1
Correct way to save memory using write buffer pool and freeing net.http default buffers (#761)
**Summary of Changes**

1. Add an example that uses the write buffer pool

The loop process of the websocket connection is inner the http handler
at existing examples, This usage will cause the 8k buffer(4k read buffer
+ 4k write buffer) allocated by net.http can't be GC(Observed by heap
profiling, see picture below) . The purpose of saving memory is not
achieved even if the WriteBufferPool is used.

In example bufferpool, server process websocket connection in a new
goroutine, and the goroutine created by the net.http will exit, then the
8k buffer will be GC.


![heap](https://user-images.githubusercontent.com/12793501/148676918-872d1a6d-ce10-4146-ba01-7de114db09f5.png)

Co-authored-by: hakunaliu <hakunaliu@tencent.com>
Co-authored-by: Corey Daley <cdaley@redhat.com>
2023-08-17 11:25:09 -04:00
.circleci drop the versions of go that are no longer supported + add 1.18 to ci 2022-06-20 16:42:42 -07:00
.github Create release-drafter.yml (#538) 2019-08-24 18:20:11 -07:00
examples Correct way to save memory using write buffer pool and freeing net.http default buffers (#761) 2023-08-17 11:25:09 -04: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 Correct way to save memory using write buffer pool and freeing net.http default buffers (#761) 2023-08-17 11:25:09 -04:00
client.go check error before GotConn for trace 2022-07-12 08:37:30 -07:00
client_server_test.go Check for and report bad protocol in TLSClientConfig.NextProtos (#788) 2022-06-21 10:54:14 -07: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 Changed the method name UnderlyingConn to NetConn to align the methods names with Go 1.18 standard library (#773) 2022-04-17 06:01:17 -07:00
conn_broadcast_test.go Fix broadcast benchmarks (#542) 2022-01-02 07:35:34 -08:00
conn_test.go Changed the method name UnderlyingConn to NetConn to align the methods names with Go 1.18 standard library (#773) 2022-04-17 06:01:17 -07: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 Add check for Sec-WebSocket-Key header (#752) 2022-02-15 17:15:20 -08:00
server_test.go Changed the method name UnderlyingConn to NetConn to align the methods names with Go 1.18 standard library (#773) 2022-04-17 06:01:17 -07: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 Add check for Sec-WebSocket-Key header (#752) 2022-02-15 17:15:20 -08:00
util_test.go Add check for Sec-WebSocket-Key header (#752) 2022-02-15 17:15:20 -08: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.