Loading... # IM-System`0.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][1] [1]: https://github.com/luolayo/im-System 最后修改:2024 年 07 月 07 日 © 允许规范转载 赞 如果觉得我的文章对你有用,请随意赞赏