websocket协议是全双通协议,服务器可以主动和客户端进行通讯,这一点也是和http协议最大的不同,在golang中实现ws协议的通讯,得益于大佬开发的轮子,还是很方便的。

照往常一样,编写客户端和服务器:

服务器端:


客户端


上面开启了一个读goroutine来读服务器端发来的消息。然后后面定义了一个for loop,里面有一个定时任务,每隔一秒向服务器端发送消息。服务器端有一个读写goroutine实现了客户端发来的消息并将消息原封不动的发送给客户端。

那么这个通讯怎么停止呢?我们在客户端实现了一个中断信号的channel用来接受中断。我们可以制造一个键盘中断,这样客户端就会发送一个close websocket的消息给服务端。