在 go 中实现 websocket 服务

1字数 617阅读 2003

目标:了解 websocket ,能够使用 golang 来实现 websocket 服务

要求:了解 go 基本语法

webSocket 的定义

WebSocket 是基于 TCP 的一个双向传输数据的协议,和HTTP协议一样,是在应用层的.他的出现,是为了解决网页进行 持久双向传输数据 的问题。

WebSocket 与 HTTP的关系 与 TCP链接的关系

其实WebSocket 和 HTTP 实际上都是一个TCP链接, WebSocket协议和HTTP协议的作用就是 规定他们用 TCP 对话的规矩可以查看 RFC6455 文档

我们来创建一个 go 项目,项目结构如下图

在 main.go 文件中引入所需的模块

* 其中 gorilla/websocket 需要从 github 上下载

创建服务,端口号为 3000,然后在终端导航到项目目录下,执行 go build src/main.go && ./main 命令(来编译 main.go 为 main.exe) 后运行 exe 文件来启动服务。如何创建 web 不是今天重点,如果想了解,可以查下有关资料或给我留言我会随后分享如何使用 go 来创建web 。

下图为 index.html 文件

启动后,在地址栏输入 localhost:300 可以看到 hehe(index.html),说明服务已经成功启动。

我们开始创建 socketweb 服务

创建一个 upgrader 的实例, 提供 Upgrade 方法,可以将 http 升级为 websocket。** go 语言支持函数返回多个返回值。

大家可能已经注意到在 func 多了 go 关键字。

** go中没有多进程多线程的概念,而是使用goroutine概念,我们可以把goroutine当作其他语言中的线程,当在一个函数前加入go关键字,就启动了一个goroutine。

*是指针运算符 , 可以表示一个变量是指针类型 , 也可以表示一个指针变量所指向的存储单元 , 也就是这个地址所存储的值 .其零值是 nil

在 chrome 开发者工具的 console 标签下,我们输入以下code 来模拟客户端,来链接 websocket 服务。看到已经连接成功

在服务端打印看客户端发送的消息

实现服务器定时推送消息给客户端

定义发送消息结构

** 在函数中, :=简洁赋值语句在明确类型的地方,可以用于替代 var

推荐阅读更多精彩内容