边学习,边实践
IM实现
技术栈
- rust
- tokio
- quinn
- iced
- ...
集群:
- node-0
- node-1
- node-2
节点
- 监听2个端口;
- 接收用户连接
- 集群节点同步消息
- 节点间互相连接,同步用户登陆到节点信息,转发消息
- 若节点未在线,其他节点尝试连接直到连接成功
- 节点上线,同步其他节点登陆用户信息
集群配置文件
id: 0
addr: "0.0.0.0:4434"
nodes:
- "127.0.0.1:4434"
- "127.0.0.1:5434"
- "127.0.0.1:6434"
server_name: "localhost"
key: "./key.der"
cert: "./cert.der"
id: 1
addr: "0.0.0.0:5434"
nodes:
- "127.0.0.1:4434"
- "127.0.0.1:5434"
- "127.0.0.1:6434"
server_name: "localhost"
key: "./key.der"
cert: "./cert.der"
id: 2
addr: "0.0.0.0:6434"
nodes:
- "127.0.0.1:4434"
- "127.0.0.1:5434"
- "127.0.0.1:6434"
server_name: "localhost"
key: "./key.der"
cert: "./cert.der"
用户
- user1 登陆 node-0
- user2 登陆 node-1
- user3 登陆 node-2
群
- group3 包含(user1,user2,user3)
发送消息
- user1 to user2
- user1 to user3
- user2 to user1
- user2 to user3
- user3 to user1
- user3 to user2
- user1 to group3
- user2 to group3
- user3 to group3
群消息
写扩散
通过其他方案解决写扩散
接收消息
- 用户: 发送人和接收人都收到消息
- 群: 群内所有登陆用户都收到消息
- 离线消息: 暂未处理,已留接口
测试截图
node-0
node-1
node-2
client
UI
跨平台:Win,Mac,Linux
问题
- UI功能不完善
- 未设计本地消息存储
截图