IM实现

发布时间 2023-12-01 21:41:38作者: 大斧子

边学习,边实践

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功能不完善
  • 未设计本地消息存储

截图