今天介绍如何用Go语言创建WebSocket服务,文章的前两部分简要介绍了WebSocket协议以及用Go标准库如何创建WebSocket服务。第三部分实践环节我们使用了gorilla/websocket库帮助我们快速构建WebSocket服务,它帮封装了使用Go标准库实现WebSocket服务相关的基础逻辑,让我们能从繁琐的底层代码中解脱出来,根据业务需求快速构建WebSocket服务。
WebSocket介绍
WebSocket通信协议通过单个TCP连接提供全双工通信通道。与HTTP相比,WebSocket不需要你为了获得响应而发送请求。它允许双向数据流,因此您只需等待服务器发送的消息即可。当Websocket可用时,它将向您发送一条消息。对于需要连续数据交换的服务(例如即时通讯程序,在线游戏和实时交易系统),WebSocket是一个很好的解决方案。 WebSocket连接由浏览器请求,并由服务器响应,然后建立连接,此过程通常称为握手。 WebSocket中的特殊标头仅需要浏览器与服务器之间的一次握手即可建立连接,该连接将在其整个生命周期内保持活动状态。 WebSocket解决了许多实时Web开发的难题,并且与传统的HTTP相比,具有许多优点:
轻量级报头减少了数据传输开销。
单个Web客户端仅需要一个TCP连接。
WebSocket服务器可以将数据推送到Web客户端。
WebSocket协议实现起来相对简单。它使用HTTP协议进行初始握手。握手成功后即建立连接,WebSocket实质上使用原始TCP读取/写入数据。
客户端请求如下所示:
GET /chat HTTP/1.1
Host: server.example.com
Upgrade: websocket
Connection: Upgrade
Sec-WebSocket-Key: x3JJHMbDL1EzLkh9GBhXDw==
Sec-WebSocket-Protocol: chat, superchat
Sec-WebSocket-Version: 13
Origin: http://example.com
这是服务器响应:
HTTP/1.1 101 Switching Protocols
Upgrade: websocket
Connection: Upgrade
Sec-WebSocket-Accept: HSmrc0sMlYUkAGmm5OPpG2HaGWk=
Sec-WebSocket-Protocol: chat
如何在Go中创建WebSocket应用
要基于Go 语言内置的net/http 库编写WebSocket服务器,你需要:
发起握手
从客户端接收数据帧
发送数据帧给客户端
关闭握手
发起握手
首先,让我们创建一个带有WebSocket端点的HTTP处理程序:
// HTTP server with We