您现在的位置是:首页 > 文章详情
nettyws v1.0.3 发布,高性能 Websocket 库
日期:2023-11-29点击:255收藏
go-netty-ws 是一款基于 go-netty 编写的高性能 Websocket 服务器 & 客户端库。
- 基于事件回调的API设计,简单易用
- 高性能(压测数据参考go-websocket-benchmark)
- 支持压缩协议
- 支持从标准库升级,无缝衔接
更新记录
- v1.0.3
- 修复压缩相关问题,提升与浏览器交互兼容性
安装
go get github.com/go-netty/go-netty-ws@latest
API 预览
type Websocket func NewWebsocket(options ...Option) *Websocket func (ws *Websocket) Close() error func (ws *Websocket) Listen(addr string) error func (ws *Websocket) Open(addr string) error func (ws *Websocket) UpgradeHTTP(w http.ResponseWriter, r *http.Request) (Conn, error) type Option func WithAsyncWrite(writeQueueSize int, writeForever bool) Option func WithBinary() Option func WithBufferSize(readBufferSize, writeBufferSize int) Option func WithCompress(compressLevel int, compressThreshold int64) Option func WithMaxFrameSize(maxFrameSize int64) Option func WithNoDelay(noDelay bool) Option func WithServeMux(serveMux *http.ServeMux) Option func WithServeTLS(tls *tls.Config) Option func WithValidUTF8() Option
简单使用案例:
服务端示例:
// 创建一个websocket实例 var ws = nettyws.NewWebsocket() // 设置OnOpen事件处理器,当连接建立时被调用 ws.OnOpen = func(conn nettyws.Conn) { fmt.Println("OnOpen: ", conn.RemoteAddr()) } // 设置OnData事件处理器,当收到一个消息时被调用 ws.OnData = func(conn nettyws.Conn, data []byte) { fmt.Println("OnData: ", conn.RemoteAddr(), ", message: ", string(data)) conn.Write(data) } // 设置OnClose事件处理器,当收到连接关闭时被调用 ws.OnClose = func(conn nettyws.Conn, err error) { fmt.Println("OnClose: ", conn.RemoteAddr(), ", error: ", err) } fmt.Println("listening websocket connections ....") // 启动端口监听,接受新的连接 if err := ws.Listen("ws://127.0.0.1:9527/ws"); nil != err { panic(err) }
客户端示例:
// 创建websocket实例 var ws = nettyws.NewWebsocket() // 设置OnOpen事件处理器,当连接建立时被回调 ws.OnOpen = func(conn nettyws.Conn) { fmt.Println("OnOpen: ", conn.RemoteAddr()) conn.Write([]byte("hello world")) } // 设置OnData事件处理器,当连接收到消息时被回调 ws.OnData = func(conn nettyws.Conn, data []byte) { fmt.Println("OnData: ", conn.RemoteAddr(), ", message: ", string(data)) } // 设置OnClose事件处理器,当连接关闭时被回调 ws.OnClose = func(conn nettyws.Conn, err error) { fmt.Println("OnClose: ", conn.RemoteAddr(), ", error: ", err) } fmt.Println("open websocket connection ...") // 连接到远程服务器 if err := ws.Open("ws://127.0.0.1:9527/ws"); nil != err { panic(err) }
从标准Http服务器升级:
// 创建websocket实例 var ws = nettyws.NewWebsocket() // 设置OnOpen事件处理器,当连接建立时被调用 ws.OnOpen = func(conn nettyws.Conn) { fmt.Println("OnOpen: ", conn.RemoteAddr()) } // 设置OnData事件处理器,当连接收到消息时被调用 ws.OnData = func(conn nettyws.Conn, data []byte) { fmt.Println("OnData: ", conn.RemoteAddr(), ", message: ", string(data)) conn.Write(data) } // 设置OnClose事件处理器,当连接关闭时被回调 ws.OnClose = func(conn nettyws.Conn, err error) { fmt.Println("OnClose: ", conn.RemoteAddr(), ", error: ", err) } fmt.Println("upgrade websocket connections ....") // 绑定http路由处理函数,并从http升级到websocket serveMux := http.NewServeMux() serveMux.HandleFunc("/ws", func(writer http.ResponseWriter, request *http.Request) { ws.UpgradeHTTP(writer, request) }) // 启动端口监听,接受客户端请求 if err := http.ListenAndServe(":9527", serveMux); nil != err { panic(err) }
相关连接

低调大师中文资讯倾力打造互联网数据资讯、行业资源、电子商务、移动互联网、网络营销平台。
持续更新报道IT业界、互联网、市场资讯、驱动更新,是最及时权威的产业资讯及硬件资讯报道平台。
转载内容版权归作者及来源网站所有,本站原创内容转载请注明来源。
相关文章
文章评论
共有0条评论来说两句吧...
文章二维码
扫描即可查看该文章
点击排行
推荐阅读
最新文章
- Docker使用Oracle官方镜像安装(12C,18C,19C)
- SpringBoot2编写第一个Controller,响应你的http请求并返回结果
- SpringBoot2全家桶,快速入门学习开发网站教程
- Jdk安装(Linux,MacOS,Windows),包含三大操作系统的最全安装
- MySQL8.0.19开启GTID主从同步CentOS8
- Springboot2将连接池hikari替换为druid,体验最强大的数据库连接池
- CentOS8编译安装MySQL8.0.19
- SpringBoot2初体验,简单认识spring boot2并且搭建基础工程
- CentOS7编译安装Cmake3.16.3,解决mysql等软件编译问题
- Linux系统CentOS6、CentOS7手动修改IP地址