go语言聊天室实现(六)创建HTTP连接,并升级为长连接go语言爬虫http我们在mian函数中go语言爬虫http,首先初始化配置文件 , 然后新建http连接 。
这个连接创建之后 , 监听服务器go语言爬虫http的9999端口 。如果url的路径后缀为 "/ws",就转发到ws/ws.go中的IndexHandler方法中 。
这个方法中首先我们创建一个websocket的Upgrader实例,然后我们使用Upgrader的upgrade方法来升级一下我们的连接为长连接 。
升级完成之后会返回一个*websocket.Conn的连接 , 我们之后所有的关于连接的操作,都是基于该conn的 。
在该连接完成之后,我们将连接存放到一个名为Client的map中,以便之后管理更为方便 。
之后,我们启动一个goroutine来读取连接中发送的信息内容,再根据内容进行相应的操作 。
Go语言HTTPServer开发的六种实现学完了 net/http 和 fasthttp 两个HTTP协议接口的客户端实现,接下来就要开始Server的开发,不学不知道一学吓一跳,居然这两个库还支持Server的开发,太方便了 。
相比于Java的HTTPServer开发基本上都是使用Spring或者Springboot框架,总是要配置各种配置类,各种 handle 对象 。Golang的Server开发显得非常简单,就是因为特别简单,或者说没有形成特别统一的规范或者框架,我发现了很多实现方式 , HTTP协议基于还是 net/http 和 fasthttp ,但是 handle 语法就多种多样了 。
先复习一下: Golang语言HTTP客户端实践 、 Golang fasthttp实践。
在Golang语言方面 , 实现某个功能的库可能会比较多 , 有机会还是要多跟同行交流,指不定就发现了更好用的库 。下面我分享我学到的六种Server开发的实现Demo 。
基于 net/http 实现,这是一种比较基础的,对于接口和 handle 映射关系处理并不优雅,不推荐使用 。
第二种也是基于 net/http ,这种编写语法可以很好地解决第一种的问题,handle和path有了类似配置的语法,可读性提高了很多 。
第三个基于 net/http 和 github.com/labstack/echo , 后者主要提供了 Echo 对象用来处理各类配置包括接口和handle映射 , 功能很丰富,可读性最佳 。
第四种依然基于 net/http 实现,引入了 github.com/gin-gonic/gin 的路由 , 看起来接口和 handle 映射关系比较明晰了 。
第五种基于 fasthttp 开发 , 使用都是 fasthttp 提供的API,可读性尚可,handle配置倒是更像Java了 。
第六种依然基于 fasthttp ,用到了 github.com/buaazp/fasthttprouter ,有点奇怪两个居然不在一个GitHub仓库里 。使用语法跟第三种方式有点类似 , 比较有条理 , 有利于阅读 。
Go语言的应用Go语言由Google公司开发 , 并于2009年开源 , 相比Java/Python/C等语言 , Go尤其擅长并发编程 , 性能堪比C语言 , 开发效率肩比Python,被誉为“21世纪的C语言” 。
Go语言在云计算、大数据、微服务、高并发领域应用应用非常广泛 。BAT大厂正在把Go作为新项目开发的首选语言 。
Go语言应用范围:
1、服务端开发:以前你使用C或者C++做的那些事情,用Go来做很合适,例如日志处理、文件系统、监控系统等;
2、DevOps:运维生态中的Docker、K8s、prometheus、grafana、open-falcon等都是使用Go语言开发;
3、网络编程:大量优秀的Web框架如Echo、Gin、Iris、beego等,而且Go内置的 net/http包十分的优秀;
4、Paas云平台领域:Kubernetes和Docker Swarm等;
5、分布式存储领域:etcd、Groupcache、TiDB、Cockroachdb、Influxdb等;
6、区块链领域:区块链里面有两个明星项目以太坊和fabric都使用Go语言;
推荐阅读
- 医美行业如何做新媒体营销,医美行业如何做新媒体营销策划
- .net如何获取访问人的ip地址,net 获取文件的路径
- 移动wed开发的小程序,移动端 小程序
- 开大型玩具赛车的游戏,开大型玩具赛车的游戏叫什么
- phpcms如何设置,phpcms使用教程
- 机器人赛车大战游戏视频,机器人赛车手
- 电脑怎么传手机歌,怎么用电脑传歌到手机内存卡
- linux命令如何复制 linux命令 复制
- jquery中点击给标签赋值,jquery在标签后追加