前言

下雨声,伴随着窗外的车的声音。心中,思索自己的梦与想。

今天,我们来聊一下,GoLang中的Websocket使用。正如,我们在学习Java的Websocket时候,可能需要一个细致的学习过程。今天,我们就好好收拾心情,

学习走起!

WebSocket

首先,我们先来好好学习下,WebSocket是个什么鬼。以下呢,摘自 百度百科。

WebSocket是一种在单个TCP连接上进行全双工通信的协议。WebSocket通信协议于2011年被IETF定为标准RFC 6455,并由RFC7936补充规范。WebSocket API也被W3C定为标准。

WebSocket使得客户端和服务器之间的数据交换变得更加简单,允许服务端主动向客户端推送数据。在WebSocket API中,浏览器和服务器只需要完成一次握手,两者之间就直接可以创建持久性的连接,并进行双向数据传输。

Gorilla Websocket

在Go中编写websocket客户端/服务器的功能,在GoLang中使用Gorilla Websocket软件包。主要的存储库代码位于Github上。

现在让我们了解如何使用Gorilla快速设置可测试的Websocket应用程序。

安装Gorilla Websocket Go软件包

go get

Websocket应用程序设计

在继续进行任何示例之前,让我们首先设计一个需要完成的工作的粗略布局。

任何使用websocket协议的应用程序通常都需要一个客户端和一个服务器

服务器程序绑定到服务器上的端口,并开始侦听任何Websocket连接。与连接有关的详细信息由websocket协议定义,该协议通过原始HTTP连接起作用。

客户端程序尝试使用websocket URL与服务器建立连接。请注意,尽管Gorilla为我们提供了用于编写客户端的API,但无需使用Golang来实现客户端程序。

如果您的Web应用程序使用单独的前端,则通常Websocket客户端将以该语言(Javascript等)实现。

但是,出于说明的目的,我们将在Go中同时编写客户端程序和服务器程序。

现在,让我们的客户端-服务器体系结构运行!

server.goclient.go

使用Gorilla Websockets –创建我们的服务器

net/http
server.gosocketHandler()

Gorilla的工作是转换原始HTTP连接进入一个有状态的websocket连接。

structUpgrader
upgrader.Upgrade()*websocket.Connection
conn.ReadMessage()conn.WriteMessage()

该服务器只是将所有传入的Websocket消息回显到客户端,因此这说明了如何将Websocket用于全双工通信。

client.go

创建我们的客户端程序

我们还将使用Gorilla编写客户端。这个简单的客户端将每隔1秒钟不断发出消息。如果我们的整个系统按预期工作,则服务器将接收间隔为1秒的数据包,并回复相同的消息。

receiveHandler
doneinterruptreceiveHandler()main()
conn.WriteMessage()
select
receiveHandler'done'case <-done'done'
select

最后,让我们看看同时运行客户端和服务器时获得的输出!

输出

image.png

总结

学习是一件持续的事情,我们今天学习了Websocket的使用。

加油同志们,不变的努力!!