go java websocket_在 go 中实现 websocket 服务

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

要求:了解 go 基本语法

webSocket 的定义

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

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

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

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

b2c3b7f41003ac6710ac7ecab0845d5a.png

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

19c83009137641ef3c80b898840ecb31.png

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

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

c33199139303c301b9af6a2187a15ee7.png

77782bbfa717aa35c8fdece9caee95e1.png

下图为 index.html 文件

3f603e53fe973d0c8941d8c97b6d7271.png

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

840ebccf4f1303f6a034d0e0addf3a6d.png

我们开始创建 socketweb 服务

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

7f938046286888a3f6c28025405987d6.png

210f92c20183b8de33352994000bf087.png

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

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

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

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

c2b7fc8b424992e49c3a1a0899dccbc3.png

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

2bdf13bad11c889fc120f27b22dcec27.png

ebb67f3250763cff30d2ed307cbede45.png

8b6aa9688cd050569b6385107a10d974.png

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

定义发送消息结构

abb04a64b76c79a0ddf99c828b35b2f2.png

12c9b1a773d05b2f1a859abd84063c57.png

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

0ece0b05c74dbd94222f786e1ce63215.png

cc58879e4f2abfab2c4f6e849b1e6f6f.png

628b354063e2852c8cb5f7367678b2eb.png

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值