前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >go实现多人聊天室,在这里你想聊什么都可以的啦!!!

go实现多人聊天室,在这里你想聊什么都可以的啦!!!

作者头像
Golang梦工厂
发布2022-07-07 15:38:47
7960
发布2022-07-07 15:38:47
举报
文章被收录于专栏:跟着asong学Golang跟着asong学Golang

大家好,我是asong,这是我的第五篇原创文章。最近在忙毕业的事情,事情比较多,鸽了好久。现在终于快完事了,我就来更新文章了。这几天学习了一下beego框架,看了一篇官方文档,看了一个官方样例,在此基础上我进行了修改,加入了数据库,完善了一些功能,可以作为一个入门小demo进行学习。代码已上传Github仓库(https://github.com/sunsong2020/Golang_Dream/tree/master/ChatRoom),可以自行下载学习,能给个star就更好了!!!

项目展示

我们可以到github上把项目克隆到本地,然后输入如下命令:

这里需要注意一下安装bee工具时可能会出现问题,这里需要进行测试,在终端输入bee,如果出现下图所示,则没有问题,如果没有的话,则安装bee工具出错,可以看我的这篇博客(https://blog.csdn.net/qq_39397165/article/details/106406773)进行安装。

安装好环境后,我们就可以进行运行项目,终端下输入bee run即可运行项目,运行成功如下图所示:

打开浏览器输入localhost:8080,可以看到如下界面:

没有账号我们可以先进行注册,点击注册按钮,可以进入注册界面,输入相关信息即可完成注册。

之后输入手机号和密码就可以进入聊天室了,两个人就可以在聊天室进行聊天了,截图如下:

我们可以看到聊天记录中进行了详细介绍,就是这样一个简单项目,可以快速熟悉beego框架。下面对一些知识点进行介绍。

WebSocket

既然要做聊天室,我们就要是实时通讯的,这里可选择方案有很多:

轮询:客户端以一定的时间间隔发送Ajax请求,这种方式实现起来简单,但是消耗带宽和服务器资源,需要频繁建立和释放TCP连接。

长轮询:与普通轮询不一样,服务端在收到请求后会保持住不立即返回响应,等到有消息更新才会响应并关闭连接,客户端处理完响应再重新发起请求。较之普通轮询没有无用的请求,但服务器保持连接也是有消耗的,如果服务端数据变化频繁的话和普通轮询并无两样。

长连接:在页面中嵌入一个隐藏的iframe,将其src设为一个长连接的请求,这样服务端就能不断向客户端发送数据,优缺点与长轮询相仿。

这几种技术都有很大缺点,导致服务器开销很大,所以我最终选择了websocket,只需要一次握手,就能完成客户端和服务之间的连接,之后通过数据帧的方式在这个连接上进行通讯,这个通讯也是双向的,服务端也可以完成主动向客户端发送消息,这样也降低了一大堆的业务逻辑,代码编写也变得简单了起来。

Golang使用websocket也很简单,只需要导入"github.com/gorilla/websocket"这个包我们就可以使用了。具体使用就不再这里介绍了,看一下再这个项目的代码示例吧:

beego

这里我是用的是beego框架,这个框架使用起来还是很简单的,毕竟是国人开发的,有完整的中文文档,根据文档我们就可以很快达到入门级别。beego是一个快速开发Go应用的HTTP框架,他可以用来快速开发API、WEB及后端服务等各种应用,是一个RESTful的框架,结合了Go本身的一些特性而设计一个框架。具体学习这个框架我们到(https://beego.me/quickstart)这个网站进行学习,里面有详细的介绍。作为一个入门框架还是不错的。

这里我使用了该框架的工具bee,进行项目创建,创建的是一个web项目,创建好后整个项目架构就都有了,项目架构如下:

从目录结构中我们可以看出,conf用来放置配置文件的,models、views、controllers这三个目录符合MVC架构,main.go是入口文件、routers目录用来配置路由,整个项目结构就是这样,是不是很简单呢。

Mysql

这里使用的是Mysql数据库。这里只创建了两个表,一个用户表,一个消息表。用户表用来存放用户信息,消息表用来存放消息记录。因为是一个练手项目,所以没有设计更多表,只有入门级别。表结构如下:

这里在介绍一下beego ORM。beego ORM是一个强大的Go语言ORM框架。支持数据库驱动有三个:Mysql、PostgreSQL、Sqlite3,这里使用的是Mysql。输入如下命令即可完成安装:

go get github.com/astaxie/beego/orm

安装完成后,我们开始使用。因为Golang语言有init函数,所以我们可以将注册数据库驱动、注册一个别名数据库这些方法放到init函数,完成数据库的驱动注册。代码示例如下:

这里我们使用了RunSyndb这个方法,使用该方法我们就不用去手动创建数据库表了,他会根据结构体中的表结构主动创建,提高了效率。

这里还有一个需要注意的点,如我们我需要我们的项目比较复杂,需要高级查询,是必须要进行注册模型的,否则将无法使用。使用RegisterModel即可完成模型注册。使用样例如下:

数据库的介绍就这么多,具体使用参考官方文档即可。

总结

这个项目整体难度一般,就是一个入门级别的项目,其他知识点就不在这里总结了。代码写的很详细,有注释,可以看懂。有兴趣的小伙伴,赶快行动起来,自己也写一个聊天室小demo,相信对你们来说很容易的啦。今日的分享就到此结束了,谢谢观看!!!

本文参与 腾讯云自媒体同步曝光计划,分享自微信公众号。
原始发表:2020-06-05,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 Golang梦工厂 微信公众号,前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
相关产品与服务
数据库
云数据库为企业提供了完善的关系型数据库、非关系型数据库、分析型数据库和数据库生态工具。您可以通过产品选择和组合搭建,轻松实现高可靠、高可用性、高性能等数据库需求。云数据库服务也可大幅减少您的运维工作量,更专注于业务发展,让企业一站式享受数据上云及分布式架构的技术红利!
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档