海量用户通讯系统-项目小结|学习笔记

简介: 快速学习海量用户通讯系统-项目小结

开发者学堂课程【Go 语言核心编程 - 面向对象、文件、单元测试、反射、TCP 编程:海量用户通讯系统-项目小结】学习笔记,与课程紧密联系,让用户快速学习知识。

课程地址:https://developer.aliyun.com/learning/course/626/detail/9824


海量用户通讯系统-项目小结

 

内容介绍

一、代码运行

二、代码实现

三、思考题

 

一、代码运行

把代码编译后,尝试是否能运行。整个系统都要进行编译,因为服务器端、客户端都发生了很大的变化。

经过第一轮编译,服务器端和客户端都顺利完成,没有发生错误,此时把三个端口放在一起

image.png

接下来进行测试工作

先启动服务器

D:、goproject>server.exe

登录第一个

D:\goproject>client.exe

输入id100

输入密码:123456

登录成功,此时无法发送群聊消息

在第二个中登录聊天室

D:\goproject>client.exe

输入id:200

密码:123456

此时在200号中可以看见100号在线,在100号中可以看到200号上线

登录300

D:\goproject>client.exe

输入id:300

密码:123456

输入2可以在群聊发送消息

发送:hello

100号和200号中都可以看到300号在群聊中发送了hello

同理,在200号或100号中发送消息,其余二人都可以收到消息,证明代码是正确的。


二、代码整理

1、思路分析:

image.png

粉色:model/CurUser

struct{

Conn

蓝色:SmsMes{

User

Content…

}

虚线:完成客户端可发送消息的思路

新增一个消息结构体SmsMes

新增一个model CurUser

在smsProcess.go增加相应的方法SendGroupMes发送一个群聊的消息

在服务器端接收到SmsMes消息

在server/process/smsProcess.go文件增加群发消息的方法

在客户端还要增加去处理服务器端转发的群发消息SmsMes

2、代码实现

【1】server/process/smsProcess.go

package process2

import (

“fmt”

“net”

“go_code/chatroom/common/message”

“go_code/chatroom/server/utils”

“encoding/json”

)

type SmsProcess struct {

//..[暂时不需字段]
}

//写方法转发消息

func (this *SmsProcess) SendGroupMes(mes *message.Message){

//遍历服务器端的onlineUsers map[int]*UserProcess,

//将消息转发取出

//取出mes的内容 SmsMes

var smsMes message.SmsMes

err := json.Unmarshasl([]byte(mes.Data),&smsMes)

if err !=nil{

fmt.Println(“json.Unmarshal err=”,err)

return

}

data,err :=

json.Marshal(mes)

if err != nil {

fmt.Println(“json.Marshal err=”, err)

}

for id,up := range userMgr.onlineUsers {

//这里,还需要过滤到自己,即不要再发给自己

If id == smsMes.UserId  {

continue

}

this.SendMesToEachOnlineUser(data ,up.Conn)

}

}

func (this *SmsProcess) SendMesToEachOnlineUser (data[]byte ,conn net.Conn){

//创建一个Transfer 实例,发送data

tf :=&utils.Transfer{

Conn : conn, //

}

err := tf.WritePkg(data)

if err != nil {

fmt.Println(“转发消息失败 err=”, err)

}

}

【2】server/main/processor.go

  //处理注册

up := &process2.UserProcess{

Conn : this.Conn,

}

err up.ServerProcessRegister(mes) // type :data

case message.SmsMesType :

//创建一个SmsProcess实例完成转发群聊消息.

smsProcess := &process2.SmsProcess{}

smsProcess.SendGroupMes(mes)

default :

fmt.Println(“消息类型不存在,无法处理…”)

}

【3】client/process/smsMgr.go

package process

import (

“fmt”

“go_code/chatroom/common/message”

“encoding/json”

)

func outputGroupMes(mes *message.Message){//这个地方mes一定SmsMes

//显示即可

//1、反序列化mes,Data

var smsMes message.SmsMes

err :=json.Unmarshal([]byte(mes.Data),&smsMes)

if err != nil {

fmt.Println(“json.Unmarshal err=”,err.Error())

return

}

//显示信息

info := fmt.Sprintf(“用户id:\t%s 对大家说:\t%s”,

smsMes.UserId,smsMes.Content”)

fmt.Println(info)

fmt.Println()

}

【4】client/process/server.go

case message.SmsMesType ://有人群发消息

outputGroupMes(&mes)

default

fmt.Println(“服务器端反悔了未知的消息类型”)

}

//fmt.Printf(“mes=%v\n,mes)

}


三、思考题

18.5.10聊天的项目的扩展功能要求

1.实现私聊.[点对点聊天]

2.如果一个登录用户离线,就把这个人从在线列表去掉

3.实现离线留言,在群聊时,如果某个用户没有在线,当登录后,可以接受离线的消息

相关文章
|
人工智能 开发者
解决HuggingFace模型下载难题:AI快站的高效加速服务
在AI研发领域,获取优质模型资源是关键。国内开发者常因海外服务器导致的下载困难而苦恼,尤其是大型模型下载更是耗时且充满挑战。AI快站(aifasthub.com)作为huggingface镜像网站,提供了高效的加速下载服务。它不仅解决了huggingface大模型下载的速度问题,还支持断点续传,保证下载连续性。此外,AI快站还提供全面及时更新的模型资源,是国内AI开发者的理想选择。
1853 0
|
前端开发 JavaScript 开发者
请详细介绍React挂载阶段的方法。
请详细介绍React挂载阶段的方法。
190 9
C#简单委托示例——让你一看就会的demo
C#简单委托示例——让你一看就会的demo
InstallShield教程-打包.NET程序
InstallShield教程-打包.NET程序
521 0
|
XML 关系型数据库 PHP
PHP常用函数大全
php usleep() 函数延迟代码执行若干微秒。 unpack() 函数从二进制字符串对数据进行解包。 uniqid() 函数基于以微秒计的当前时间,生成一个唯一的 ID。
1393 0
|
2天前
|
存储 弹性计算 人工智能
【2025云栖精华内容】 打造持续领先,全球覆盖的澎湃算力底座——通用计算产品发布与行业实践专场回顾
2025年9月24日,阿里云弹性计算团队多位产品、技术专家及服务器团队技术专家共同在【2025云栖大会】现场带来了《通用计算产品发布与行业实践》的专场论坛,本论坛聚焦弹性计算多款通用算力产品发布。同时,ECS云服务器安全能力、资源售卖模式、计算AI助手等用户体验关键环节也宣布升级,让用云更简单、更智能。海尔三翼鸟云服务负责人刘建锋先生作为特邀嘉宾,莅临现场分享了关于阿里云ECS g9i推动AIoT平台的场景落地实践。
【2025云栖精华内容】 打造持续领先,全球覆盖的澎湃算力底座——通用计算产品发布与行业实践专场回顾
|
4天前
|
云安全 数据采集 人工智能
古茗联名引爆全网,阿里云三层防护助力对抗黑产
阿里云三层校验+风险识别,为古茗每一杯奶茶保驾护航!
古茗联名引爆全网,阿里云三层防护助力对抗黑产
|
4天前
|
存储 机器学习/深度学习 人工智能
大模型微调技术:LoRA原理与实践
本文深入解析大语言模型微调中的关键技术——低秩自适应(LoRA)。通过分析全参数微调的计算瓶颈,详细阐述LoRA的数学原理、实现机制和优势特点。文章包含完整的PyTorch实现代码、性能对比实验以及实际应用场景,为开发者提供高效微调大模型的实践指南。
537 2