千家信息网

怎么用go实现多人聊天室

发表于:2024-11-22 作者:千家信息网编辑
千家信息网最后更新 2024年11月22日,本篇内容介绍了"怎么用go实现多人聊天室"的有关知识,在实际案例的操作过程中,不少人都会遇到这样的困境,接下来就让小编带领大家学习一下如何处理这些情况吧!希望大家仔细阅读,能够学有所成!项目展示我们可
千家信息网最后更新 2024年11月22日怎么用go实现多人聊天室

本篇内容介绍了"怎么用go实现多人聊天室"的有关知识,在实际案例的操作过程中,不少人都会遇到这样的困境,接下来就让小编带领大家学习一下如何处理这些情况吧!希望大家仔细阅读,能够学有所成!


项目展示

我们可以到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即可完成模型注册。使用样例如下:


"怎么用go实现多人聊天室"的内容就介绍到这里了,感谢大家的阅读。如果想了解更多行业相关的知识可以关注网站,小编将为大家输出更多高质量的实用文章!

0