如何用Go语言创建WebSocket服务

如何用Go语言创建WebSocket服务_第1张图片

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 WebSocket endpoint

func Server() {

http.HandleFunc("/", func(w http.ResponseWriter, r *http.Request) {

ws, err :&

你可能感兴趣的:(web,HTTP,websocket,服务器,网络协议)