首页 > 其他分享 >IM实现

IM实现

时间:2023-12-01 21:44:35浏览次数:28  
标签:node 127.0 user2 user3 user1 实现 0.1 IM

边学习,边实践

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

截图



标签:node,127.0,user2,user3,user1,实现,0.1,IM
From: https://www.cnblogs.com/dafuzi/p/17870917.html

相关文章

  • 熵编码实现
    1defcompress(self,x):2y=self.g_a(x)3y_strings=self.entropy_bottleneck.compress(y)4return{"strings":[y_strings],"shape":y.size()[-2:]}56defdecompress(self,strings,shape):7......
  • Applescript实现无痕检测手机号或邮箱号是否注册iMessage服务,iMessage蓝号检测完美实
    一、检测数据的两种方式:1.人工筛选,将要验证的号码输出到文件中,以逗号分隔。再将文件中的号码粘贴到iMessage客户端的地址栏,iMessage客户端会自动逐个检验该号码是否为iMessage账号,检验速度视网速而定。红色表示不是iMessage账号,蓝色表示iMessage账号。2.编写脚本控制Macos/iphon......
  • 《信息安全系统设计与实现》学习笔记12
    《信息安全系统设计与实现》学习笔记12第十四章MySQL数据库系统MySQL简介MySQL(MySQL2018)是一个关系数据库系统(Codd1970)。在关系数据库中,数据存储在表中。每个表由多个行和列组成。表中的数据相互关联。表也可能与其他表有关联。关系结构使得可在表上运行查询来检索信息......
  • java Runtime
    packagenet.elaina.Runtime;importjava.io.IOException;publicclasstest1{publicstaticvoidmain(String[]args)throwsIOException{/*publicstaticRuntimegetRuntime()当前系统的运行环境对象publicvoidexit(......
  • 第5次软工任务_实现与项目总结_10组虎纠吃游实评
    github源码链接:https://github.com/prettyKuromi/hujiu/tree/master微信小程序测试链接提供测试账号:demouser,密码:1231231,也可自行注册新账号(由于小程序类目个人开发者受限及无法通过认证,无法通过审核并发布小程序,扫码进入体验版后请点击右上角…,选择开发调试-打开调试,即可测试......
  • 无涯教程-Python - 时间序列(Time)
    时间序列(TimeSeries)是一系列数据点,其中每个数据点都与时间戳关联,一个简单的示例是在给定的一天中,股票在不同时间点的价格,另一个示例是该地区一年中不同月份的降雨量。在下面的示例中,无涯教程以特定股票代码每天四分之一的股价价格为示例,将这些值捕获为一个csv文件,然后使用pan......
  • js实现树形结构
    letcityList=[ {id:1,parentId:0,name:'江苏省'}, {id:2,parentId:0,name:'广东省'}, {id:3,parentId:0,name:'安徽省'}, {id:4,parentId:1,name:'苏州市'}, {id:5,parentId:1,name:'无锡市'}, {id:6,parentId:......
  • 如何快速实现XML与JSON转换
    XML与JSON之间的转换常常用于以下场景:1.数据交换:当需要在不同的系统、平台或服务之间进行数据交换时,常常会使用XML或JSON进行数据的序列化和反序列化。比如,一个Web服务可能需要返回数据给一个移动应用,这时,数据就可以通过XML或JSON格式进行传输。2.数据存储:XML和JSON都常用于数据......
  • ESP32简单实现新版HC-SR04超声波模块(MicroPython+Thonny)
    一、新版HC-SR04简介新版HC-SR04,性能远超老版HC-SR04,US-015;在测距精度高于老版HC-SR04和US-015的情况下,测距范围更远,可达6米,远超一般超声波测距模块。采用CS-100A超声波测距SOC芯片,高性能,工业级,宽电压、低价格,成本击穿底价,只有普通超声波测距模块一半的价格,而性能远超普通超声波......
  • Flask实践--Flask蓝图实现各功能模块分离
    最近在尝试使用flask编写一个网站防篡改监测平台,写到后面发现各种模块工作都杂糅在一个py文件中,尝试用蓝图blueprint解决。比如单独写一个登出举例,新建logut.py:  app.py中: 前端; ......