为了账号安全,请及时绑定邮箱和手机立即绑定

在 go 中实现 websocket 服务

标签:
Go

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

要求:了解 go 基本语法

webSocket 的定义

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

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

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

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

webp

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

webp

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

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

webp

webp

下图为 index.html 文件

webp

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

webp

我们开始创建 socketweb 服务

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

webp

webp

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

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

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

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

webp

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

webp

webp

webp

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

定义发送消息结构

webp

webp

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

webp

webp

webp



作者:zidea
链接:https://www.jianshu.com/p/a235665b49de


点击查看更多内容
TA 点赞

若觉得本文不错,就分享一下吧!

评论

作者其他优质文章

正在加载中
  • 推荐
  • 评论
  • 收藏
  • 共同学习,写下你的评论
感谢您的支持,我会继续努力的~
扫码打赏,你说多少就多少
赞赏金额会直接到老师账户
支付方式
打开微信扫一扫,即可进行扫码打赏哦
今天注册有机会得

100积分直接送

付费专栏免费学

大额优惠券免费领

立即参与 放弃机会
意见反馈 帮助中心 APP下载
官方微信

举报

0/150
提交
取消