{"id":20208724,"url":"https://github.com/go-netty/go-netty-ws","last_synced_at":"2025-04-10T12:57:11.014Z","repository":{"id":172725642,"uuid":"648507525","full_name":"go-netty/go-netty-ws","owner":"go-netty","description":"An Websocket server \u0026 client written by https://github.com/go-netty/go-netty","archived":false,"fork":false,"pushed_at":"2024-12-06T07:43:14.000Z","size":61,"stargazers_count":33,"open_issues_count":0,"forks_count":1,"subscribers_count":2,"default_branch":"master","last_synced_at":"2025-03-24T11:45:16.908Z","etag":null,"topics":["go","go-netty","websocket"],"latest_commit_sha":null,"homepage":"","language":"Go","has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":"apache-2.0","status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/go-netty.png","metadata":{"files":{"readme":"README.md","changelog":null,"contributing":null,"funding":null,"license":"LICENSE","code_of_conduct":null,"threat_model":null,"audit":null,"citation":null,"codeowners":null,"security":null,"support":null,"governance":null,"roadmap":null,"authors":null,"dei":null,"publiccode":null,"codemeta":null}},"created_at":"2023-06-02T06:16:00.000Z","updated_at":"2025-02-01T19:00:15.000Z","dependencies_parsed_at":"2023-12-22T05:22:32.599Z","dependency_job_id":"31470bda-a547-4dd0-b68c-89d9810fc20f","html_url":"https://github.com/go-netty/go-netty-ws","commit_stats":null,"previous_names":["go-netty/go-netty-ws"],"tags_count":10,"template":false,"template_full_name":null,"repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/go-netty%2Fgo-netty-ws","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/go-netty%2Fgo-netty-ws/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/go-netty%2Fgo-netty-ws/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/go-netty%2Fgo-netty-ws/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/go-netty","download_url":"https://codeload.github.com/go-netty/go-netty-ws/tar.gz/refs/heads/master","host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":248222725,"owners_count":21067832,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2022-07-04T15:15:14.044Z","host_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub","repositories_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories","repository_names_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repository_names","owners_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners"}},"keywords":["go","go-netty","websocket"],"created_at":"2024-11-14T05:36:45.229Z","updated_at":"2025-04-10T12:57:10.990Z","avatar_url":"https://github.com/go-netty.png","language":"Go","funding_links":[],"categories":[],"sub_categories":[],"readme":"# go-netty-ws\n\n[![GoDoc][1]][2] [![license-Apache 2][3]][4]\n\n\u003c!--[![Downloads][7]][8]--\u003e\n\n[1]: https://godoc.org/github.com/go-netty/go-netty-ws?status.svg\n[2]: https://godoc.org/github.com/go-netty/go-netty-ws\n[3]: https://img.shields.io/badge/license-Apache%202-blue.svg\n[4]: LICENSE\n\nAn Websocket server \u0026 client written by [go-netty](https://github.com/go-netty/go-netty)\n\n## Install\n```\ngo get github.com/go-netty/go-netty-ws@latest\n```\n\n## API overview\n```\ntype Websocket\n    func NewWebsocket(options ...Option) *Websocket\n    func (ws *Websocket) Close() error\n    func (ws *Websocket) Listen(addr string) error\n    func (ws *Websocket) Open(addr string) (Conn, error)\n    func (ws *Websocket) ServeHTTP(w http.ResponseWriter, r *http.Request)\n    func (ws *Websocket) UpgradeHTTP(w http.ResponseWriter, r *http.Request) (Conn, error)\n\ntype Option\n    func WithAsyncWrite(writeQueueSize int, writeForever bool) Option\n    func WithBinary() Option\n    func WithBufferSize(readBufferSize, writeBufferSize int) Option\n    func WithCompress(compressLevel int, compressThreshold int64) Option\n    func WithClientHeader(header http.Header) Option\n    func WithDialer(dialer Dialer) Option\n    func WithMaxFrameSize(maxFrameSize int64) Option\n    func WithNoDelay(noDelay bool) Option\n    func WithServerHeader(header http.Header) Option\n    func WithServeMux(serveMux *http.ServeMux) Option\n    func WithServeTLS(tls *tls.Config) Option\n    func WithValidUTF8() Option\n```\n\n## Easy to use\n\n\u003e Note: `nettyws` does not support mixed text messages and binary messages, use the `WithBinary` option to switch to binary message mode.\n\n### server :\n```go\n// create websocket instance\nvar ws = nettyws.NewWebsocket()\n\n// setup OnOpen handler\nws.OnOpen = func(conn nettyws.Conn) {\n    fmt.Println(\"OnOpen: \", conn.RemoteAddr())\n}\n\n// setup OnData handler\nws.OnData = func(conn nettyws.Conn, data []byte) {\n    fmt.Println(\"OnData: \", conn.RemoteAddr(), \", message: \", string(data))\n    conn.Write(data)\n}\n\n// setup OnClose handler\nws.OnClose = func(conn nettyws.Conn, err error) {\n    fmt.Println(\"OnClose: \", conn.RemoteAddr(), \", error: \", err)\n}\n\nfmt.Println(\"listening websocket connections ....\")\n\n// listen websocket server\nif err := ws.Listen(\"ws://127.0.0.1:9527/ws\"); nil != err {\n    panic(err)\n}\n```\n\n### client :\n```go\n// create websocket instance\nvar ws = nettyws.NewWebsocket()\n\n// setup OnOpen handler\nws.OnOpen = func(conn nettyws.Conn) {\n    fmt.Println(\"OnOpen: \", conn.RemoteAddr())\n    conn.Write([]byte(\"hello world\"))\n}\n\n// setup OnData handler\nws.OnData = func(conn nettyws.Conn, data []byte) {\n    fmt.Println(\"OnData: \", conn.RemoteAddr(), \", message: \", string(data))\n}\n\n// setup OnClose handler\nws.OnClose = func(conn nettyws.Conn, err error) {\n    fmt.Println(\"OnClose: \", conn.RemoteAddr(), \", error: \", err)\n}\n\nfmt.Println(\"open websocket connection ...\")\n\n// connect to websocket server\nif _, err := ws.Open(\"ws://127.0.0.1:9527/ws\"); nil != err {\n    panic(err)\n}\n```\n\n### upgrade from http server:\n```go\n// create websocket instance\nvar ws = nettyws.NewWebsocket()\n\n// setup OnOpen handler\nws.OnOpen = func(conn nettyws.Conn) {\n    fmt.Println(\"OnOpen: \", conn.RemoteAddr())\n}\n\n// setup OnData handler\nws.OnData = func(conn nettyws.Conn, data []byte) {\n    fmt.Println(\"OnData: \", conn.RemoteAddr(), \", message: \", string(data))\n    conn.Write(data)\n}\n\n// setup OnClose handler\nws.OnClose = func(conn nettyws.Conn, err error) {\n    fmt.Println(\"OnClose: \", conn.RemoteAddr(), \", error: \", err)\n}\n\nfmt.Println(\"upgrade websocket connections ....\")\n\n// upgrade websocket connection from http server\nhttp.Handle(\"/ws\", ws)\n\n// listen http server\nif err := http.ListenAndServe(\":9527\", nil); nil != err {\n    panic(err)\n}\n```\n\n## Associated\n* https://github.com/go-netty/go-netty\n* https://github.com/go-netty/go-netty-transport\n* https://github.com/gobwas/ws\n* https://github.com/lesismal/go-websocket-benchmark\n* https://github.com/crossbario/autobahn-testsuite","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fgo-netty%2Fgo-netty-ws","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Fgo-netty%2Fgo-netty-ws","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fgo-netty%2Fgo-netty-ws/lists"}