可在GoDoc网站上找到文档 。您可以通过下面代码行来安装它:
go get github.com/gobwas/ws客户端:
// init // schema – can be ws or wss // host, port – ws server conn, _, _, err := ws.DefaultDialer.Dial(ctx, {schema}://{host}:{port}) if err != nil { // handle error } ....... // send message err = wsutil.WriteClientMessage(conn, ws.OpText, {message}) if err != nil { // handle error } ....... // receive messagemsg, _, err := wsutil.ReadServerData(conn) if err != nil { // handle error } .......服务器端:
// init listener, err := net.Listen("tcp", op.Port) if err != nil { // handle error } conn, err := listener.Accept() if err != nil { // handle error } upgrader := ws.Upgrader{} if _, err = upgrader.Upgrade(conn); err != nil { // handle error } ....... // receive message for { reader := wsutil.NewReader(conn, ws.StateServerSide) _, err := reader.NextFrame() if err != nil { // handle error } data, err := ioutil.ReadAll(reader) if err != nil { // handle error } ....... }....... // send message msg := "new server message" if err := wsutil.WriteServerText(conn, {message}); err != nil { // handle error } .......
- GOWebsockets
您可以在GoDoc网站和项目的GitHub页面上找到有关如何使用GOWebsockets的文档和示例 。通过添加以下代码行来安装软件包:
go get github.com/sacOO7/gowebsocket客户端:
// init // schema – can be ws or wss // host, port – ws server socket := gowebsocket.New({schema}://{host}:{port}) socket.Connect() .......// send message socket.SendText({message}) or socket.SendBinary({message}) ....... // receive message socket.OnTextMessage = func(message string, socket gowebsocket.Socket) { // hande received message }; or socket.OnBinaryMessage = func(data [] byte, socket gowebsocket.Socket) { // hande received message };....... 服务器端:
// init // schema – can be ws or wss // host, port – ws server conn, _, _, err := ws.DefaultDialer.Dial(ctx, {schema}://{host}:{port}) if err != nil { // handle error } .......// send message err = wsutil.WriteClientMessage(conn, ws.OpText, {message}) if err != nil { // handle error } .......// receive messagemsg, _, err := wsutil.ReadServerData(conn) if err != nil { // handle error }比较现有解决方案
我们已经描述了Go中使用最广泛的四个WebSocket库 。下表包含这些工具的详细比较 。

文章插图
图 Websocket库比较
为了更好地分析其性能,我们还进行了一些基准测试 。结果如下:

文章插图
- 如您所见,GOBWAS与其他库相比具有明显的优势 。每个操作分配的内存更少,每个分配使用的内存和时间更少 。另外,它的I/O分配为零 。此外,GOBWAS还具有创建WebSocket客户端与服务器的交互并接收消息片段所需的所有方法 。您也可以使用它轻松地使用TCP套接字 。
- 如果您真的不喜欢GOBWAS,则可以使用Gorilla 。它非常简单,几乎具有所有相同的功能 。您也可以使用STDLIB,但由于它缺少许多必要的功能,并且在生产中表现不佳,而且正如您在基准测试中所看到的那样,它的性能较弱 。GOWebsocket与STDLIB大致相同 。但是,如果您需要快速构建原型或MVP,则它可能是一个合理的选择 。
- go-socket.io
- Apache Thrift
- gRPC
- package rpc
本文翻译自《How to Use Websockets in Golang : Best Tools and Step-by-Step Guide》 。
译者:TonyBai
推荐阅读
- 淘宝店铺如何申请 淘宝企业店铺注册流程
- 如何科学合理地喝冷饮
- 午睡好处多 夏季如何健康午睡
- 实用 如何泡好杯茶
- 夏季如何预防中暑 推荐清热解暑汤饮
- 如何鉴别碧螺春是否人工上色
- 天子香烟如何鉴别真假
- 如何安全地对电脑系统进行优化,使电脑运行速度变快
- 脸色发黑或是肝受损 春季如何按摩养肝
- 春季养生美容觉 睡眠不足如何成“睡美人”
