IM-System
文章目录

IM-System0.1.3
项目介绍
这是我写的第一个开源的用于go初学者学习的项目,这个项目需要你有一些tcp的知识,当然如果你不懂套接字/tcp之类的知识,你可能会不理解连接类的思路,不过这没关系,你可以用于go的学习。
IM-System 是一个使用 Go 语言设计的简洁但功能齐全的即时通讯系统。该系统包括客户端和服务器端组件,支持公聊、私聊、用户重命名、用户列表等功能。本文将详细介绍该项目的设计与实现。
项目结构
项目的目录结构如下:
im-system/ - client/ - client.go - server/ - server.go - logger/ - logger.go - model/ - user.go - user_event.go - message.go - util/ - io.go - app.go这就是项目的全部结构了,这个结构算是比较简单了,我尽量将一些功能剥离出来,使得文件不那么臃肿
设计与实现
1. 客户端 (client)
客户端组件(client.go)负责用户交互、连接服务器以及发送/接收消息。主要功能包括:
- 连接服务器:客户端使用 TCP 连接到服务器。
- 用户交互:提供菜单供用户选择操作,如重命名、发送公聊或私聊消息、查看在线用户列表等。
- 处理服务器消息:监听并显示来自服务器的消息。
2. 服务器 (server)
服务器组件(server.go)负责管理客户端连接、广播消息以及处理用户事件。主要功能包括:
- 接受连接:服务器接受并管理来自客户端的连接。
- 广播消息:处理公聊消息并广播给所有连接的客户端。
- 私聊消息:允许用户使用
/private <user> <message>命令发送私聊消息,服务器将消息路由给指定用户。 - 用户事件:管理用户的加入、离开、重命名事件以及用户列表请求。
3. 日志 (logger)
日志组件(logger.go)提供简单的日志机制,用于记录信息、警告和错误消息,帮助跟踪应用行为和调试问题。
4. 模型 (model)
模型(user.go、user_event.go、message.go)定义了应用中使用的数据结构,包括:
- 用户 (User):表示一个已连接的用户。
- 用户事件 (UserEvent):表示与用户相关的事件(加入、离开、消息、重命名)。
- 消息 (Message):表示用户发送的消息。
5. 工具 (util)
工具组件(io.go)提供辅助函数,如读取命令行输入。
关键功能
公聊
用户可以发送消息给所有连接的用户,服务器通过广播消息实现公聊功能。
私聊
用户可以使用 /private <user> <message> 命令发送私聊消息,服务器将这些消息路由给指定的接收者。
用户重命名
用户可以使用 /rename <new_name> 命令更改用户名,服务器会通知所有用户该用户的名字已更改。
用户列表
用户可以使用 /users 命令请求在线用户列表,服务器会返回当前连接的所有用户列表。
不活动处理
服务器跟踪用户活动,如果用户在指定时间内无活动,将其断开连接以释放资源。
结论
IM-System 项目是一个结构良好且功能齐全的即时通讯系统,使用 Go 语言的 net 包进行网络编程,利用 goroutine 处理并发,管理客户端与服务器的通信。该项目可以作为更高级消息系统的基础,为对网络编程和 Go 语言感兴趣的开发者提供了极好的学习体验。
地址
本文标题:IM-System
本文链接:https://blog.luola.me/34.html
除非另有说明,本作品采用 知识共享署名-非商业性使用-相同方式共享 4.0 国际许可协议。
声明:转载请注明文章来源。