欢迎来到尧图网

客户服务 关于我们

您的位置:首页 > 财经 > 产业 > 用go实现创建WebSocket服务器

用go实现创建WebSocket服务器

2025/5/12 5:20:46 来源:https://blog.csdn.net/jkzyx123/article/details/143587668  浏览:    关键词:用go实现创建WebSocket服务器

使用Go语言创建WebSocket服务器可以利用现有的库来简化开发过程。gorilla/websocket 是一个非常流行且功能强大的库,适用于Go语言的WebSocket应用。下面是一个详细的步骤指南,介绍如何使用 gorilla/websocket 创建一个WebSocket服务器,并实现商品信息的实时广播。

安装依赖

首先,你需要安装 gorilla/websocket 库。可以通过以下命令安装:

go get github.com/gorilla/websocket

创建WebSocket服务器

接下来,我们将创建一个简单的WebSocket服务器,该服务器可以接收客户端连接,并向所有连接的客户端广播商品信息。

1. 导入必要的包
package mainimport ("fmt""log""net/http""time""github.com/gorilla/websocket"
)
2. 设置WebSocket升级器

WebSocket连接需要通过HTTP握手来建立。gorilla/websocket 提供了一个 Upgrader 结构体来处理这个过程。

var upgrader = websocket.Upgrader{ReadBufferSize:  1024,WriteBufferSize: 1024,// 允许跨域访问CheckOrigin: func(r *http.Request) bool {return true},
}
3. 创建WebSocket处理器

定义一个函数来处理WebSocket连接。在这个函数中,我们将读取消息并广播商品信息。

func serveWs(w http.ResponseWriter, r *http.Request) {// 升级HTTP连接到WebSocket连接conn, err := upgrader.Upgrade(w, r, nil)if err != nil {log.Println("Failed to set websocket upgrade:", err)return}defer conn.Close()// 模拟商品添加事件for {item := map[string]interface{}{"id":    1,"name":  "Apple","price": 2.5,}// 将商品信息发送给客户端err := conn.WriteJSON(item)if err != nil {log.Println("Error writing message:", err)break}// 每隔5秒发送一次time.Sleep(5 * time.Second)}
}
4. 注册路由并启动HTTP服务器

最后,我们需要注册路由并启动HTTP服务器。

func main() {http.HandleFunc("/ws", serveWs)fmt.Println("Starting server on :8080")if err := http.ListenAndServe(":8080", nil); err != nil {log.Fatal("ListenAndServe: ", err)}
}

完整代码

将上述代码片段组合在一起,得到完整的WebSocket服务器代码:

package mainimport ("fmt""log""net/http""time""github.com/gorilla/websocket"
)var upgrader = websocket.Upgrader{ReadBufferSize:  1024,WriteBufferSize: 1024,CheckOrigin: func(r *http.Request) bool {return true},
}func serveWs(w http.ResponseWriter, r *http.Request) {conn, err := upgrader.Upgrade(w, r, nil)if err != nil {log.Println("Failed to set websocket upgrade:", err)return}defer conn.Close()for {item := map[string]interface{}{"id":    1,"name":  "Apple","price": 2.5,}err := conn.WriteJSON(item)if err != nil {log.Println("Error writing message:", err)break}time.Sleep(5 * time.Second)}
}func main() {http.HandleFunc("/ws", serveWs)fmt.Println("Starting server on :8080")if err := http.ListenAndServe(":8080", nil); err != nil {log.Fatal("ListenAndServe: ", err)}
}

运行服务器

保存文件并运行:

go run main.go

测试连接

你可以使用任何WebSocket客户端工具(如浏览器的开发者工具)来测试连接。连接到 ws://localhost:8080/ws,你应该每5秒接收到一次商品信息。

扩展功能

  • 多客户端支持:可以在服务器端维护一个连接列表,以便向所有连接的客户端广播消息。
  • 消息类型:可以定义不同的消息类型,以便客户端根据消息类型做出相应的处理。
  • 错误处理:添加更详细的错误处理和日志记录,以便更好地调试和监控。

版权声明:

本网仅为发布的内容提供存储空间,不对发表、转载的内容提供任何形式的保证。凡本网注明“来源:XXX网络”的作品,均转载自其它媒体,著作权归作者所有,商业转载请联系作者获得授权,非商业转载请注明出处。

我们尊重并感谢每一位作者,均已注明文章来源和作者。如因作品内容、版权或其它问题,请及时与我们联系,联系邮箱:809451989@qq.com,投稿邮箱:809451989@qq.com

热搜词