Go语言实现多人聊天室

前言:

大家好,我是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,相信对你们来说很容易的啦。今日的分享就到此结束了,谢谢观看!!!

大家可以关注我的公众号,公众号搜索:Golang梦工厂,或者扫描下方二维码即可关注。我会定期发布优质文章,主要面向Golang语言知识、框架学习、面试整理等等,你想学的这里都有呦!!!

  • 1
    点赞
  • 14
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值