nettyws v1.0.3 发布,高性能 Websocket 库


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)
}

相关连接

  • https://github.com/go-netty/go-netty
  • https://github.com/go-netty/go-netty-transport
  • https://github.com/gobwas/ws
  • https://github.com/lesismal/go-websocket-benchmark
  • https://github.com/crossbario/autobahn-testsuite

相關推薦

2023-08-18

X Spring File Storage v1.0.3 已经发布,Spring 文件存储库 此版本更新内容包括: 修复了 FileStorageClientFactory 未自动加载的问题 优化了 HuaweiObsFileStorage 的 ACL 转换方式,使其兼容低版本 SDK 修复了 GoogleCloudStorageFileStorage 的 ACL 转

2022-10-30

更新内容 增加课程用户导出 增加考试用户和考试记录导出 播放器中间增加大号播放按钮 单页和帮助增加浏览计数属性 后台增加查看考试答题详情 课程和章节增加最近学习属性 logo上增加首页链接 修正分类默认

2023-03-07

x、Vue、ElementUI 等框架精心打造的一款模块化、插件化、高性能的前后端分离架构敏捷开发框架,可用于快速搭建前后端分离后台管理系统,本着简化开发、提升开发效率的初衷,目前框架已集成了完整的 RBAC 权限架构和常规基

2022-10-11

RedisFront v1.0.3 已经发布,跨平台 Redis 桌面客户端工具。 此版本更新内容包括: 优化数据库Key数量显示 优化数据库清库操作提示 解决Mac下因UTF8-BOM编码无法连接的问题 增加String类型值JSON自动格式化 详情查看:https://g

2023-09-24

技术都能四世同堂,凭什么开发 30 岁就要被干掉? Bun 发布了其最新版本 v1.0.3,这是一个集 JavaScript 运行时、打包器、转译器和包管理器于一体的工具。这次的更新不仅修复了众多已知的问题,还引入了一系列令人期待的新

2023-01-16

Vesta 是一款实用、方便的镜像扫描以及 Docker、Kubernetes 基线安全检查工具。 致力检查因 Docker 或 Kubernetes 错误配置而导致的各种潜在安全问题的发生。 Vesta v1.0.3 更新内容如下: 新功能 镜像检查增加对Java,PHP,Rust依赖的版

2023-09-01

F 到底是可观测领域的神器 or 鸡肋? 简介 quickws是一个高性能的websocket库 特性 3倍的简单 实现rfc6455 实现rfc7692 内容 安装 例子 服务端 客户端 配置函数 客户端配置参数 配置header 配置握手时的

2023-04-02

、基本介绍 MobileIMSDK-微信小程序端是一套基于微信原生WebSocket的即时通讯库: 1)超轻量级、无任何第3方库依赖(开箱即用); 2)纯JS编写、ES6语法、高度提炼,简单易用; 3)基于微信原生WebSocket API,简洁优雅; 4)

2022-10-28

cURL 7.86 已发布,此版本添加实验性 WebSocket 支持、移除 NPN 支持,并带来大量修复。 重点 已移除 NPN 支持 curl 不再支持使用 NPN 协商 HTTP/2。执行此操作的标准方法长期以来一直是 ALPN,且浏览器几年前就取消了对 NPN 的支持。

2022-06-15

专为高性能计算机图形学设计的编程语言 Taichi(太极)已经发布 1.0.3 版本,这是一个维护版本,带来模块更新和一些 Bug 修复。主要内容如下: 模块 支持导入外部 Vulkan 缓冲区 ( #5020 ) 支持将 taichi 作为 AOT 模块的子目录 (

2024-03-27

9年积累,沉淀出来的高性能通用通讯服务,支持即时通讯,站内/系统消息,消息中台,物联网通讯,音视频信令,直播弹幕,客服系统,AI通讯,即时社区等场景 特点 📚 完全自研:自研消息数据库,消息分区永久存储,

2022-11-03

0更新功能   本次,跨境电商开源独立站BeikeShop从v1.0.3升级到v1.1.0版本,来看看我们更新了哪些功能   1. 新增_插件市场 可通过插件市场,给BeikeShop系统安装插件 https://beikeshop.com/plugin 当然,您也可以根据您的需求

2023-01-18

[3]、本次更新内容 【主要更新】 新增融合 Stomp WebSocket、私信、公告等功能的独立消息服务: 融合 Stomp WebSocket、私信、公告等功能的独立消息服务,支持前端与后端采用 WebSocket 和 REST 接口互发消息。 新增私信、公

2022-12-22

Open Policy Agent 等顶级项目中被调用执行任务。Gorilla 的 WebSocket 库甚至被用于 Kubernetes 中。 gorilla/mux 的 first commit 是在 2012 年 10 月,也就是在 Go 达到 1.0 版本之后的几个月时间内。gorilla/websocket 开始于 2013 年 10 月,而其他