IM-System0.1.3

项目介绍

这是我写的第一个开源的用于go初学者学习的项目,这个项目需要你有一些tcp的知识,当然如果你不懂套接字/tcp之类的知识,你可能会不理解连接类的思路,不过这没关系,你可以用于go的学习。

IM-System 是一个使用 Go 语言设计的简洁但功能齐全的即时通讯系统。该系统包括客户端和服务器端组件,支持公聊、私聊、用户重命名、用户列表等功能。本文将详细介绍该项目的设计与实现。

项目结构

项目的目录结构如下:

TEXT
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.gouser_event.gomessage.go)定义了应用中使用的数据结构,包括:

  • 用户 (User):表示一个已连接的用户。
  • 用户事件 (UserEvent):表示与用户相关的事件(加入、离开、消息、重命名)。
  • 消息 (Message):表示用户发送的消息。

5. 工具 (util)

工具组件(io.go)提供辅助函数,如读取命令行输入。

关键功能

公聊

用户可以发送消息给所有连接的用户,服务器通过广播消息实现公聊功能。

私聊

用户可以使用 /private <user> <message> 命令发送私聊消息,服务器将这些消息路由给指定的接收者。

用户重命名

用户可以使用 /rename <new_name> 命令更改用户名,服务器会通知所有用户该用户的名字已更改。

用户列表

用户可以使用 /users 命令请求在线用户列表,服务器会返回当前连接的所有用户列表。

不活动处理

服务器跟踪用户活动,如果用户在指定时间内无活动,将其断开连接以释放资源。

结论

IM-System 项目是一个结构良好且功能齐全的即时通讯系统,使用 Go 语言的 net 包进行网络编程,利用 goroutine 处理并发,管理客户端与服务器的通信。该项目可以作为更高级消息系统的基础,为对网络编程和 Go 语言感兴趣的开发者提供了极好的学习体验。

地址

IM-System