


问:如何设计安全通讯

方案一:每个用户的对称加密密钥一样:比如,用用户的登陆密码做密钥,这种情况只有在用户的密码被黑客获知后才不安全
方案二:防ssl通讯加密方案

在通讯之后,先预定下安全通讯,
1 服务端生成一对非对称加密的公钥1和私钥1,然后把公钥1通过网络传给客户端,
2 客户端在自己的本地也随机生成一对非对称加密的公钥2和私钥2,然后用公钥1对公钥2进行加密之后通过网络传回服务端
3 服务端通过私钥1解开得到公钥2,然后随机生成一个对称加密的key,用公钥2加密对称加密的key,传给客户端
4 客户端通过私钥2解开获得对称加密的key
最后:后面的消息传输就用这个对称加密key来加密

IM系统架构:简单版





详细说下聊天流程:注意router层记录用户是否在线,和是哪个接入节点登陆的
1 沈剑发消息给崔总:比如发:你好
2 首先到tc-entry接入端,
3 再到逻辑端(是不是黑名单,是不是敏感词,判断能成功发出去)
4 再告诉router路由层,这个时候,此消息投递成功,后面分两种情况:
1)检查崔总是否在线,如果不在线,把消息保存到数据库das
2) 如果在线,那就知道崔总在哪个接入节点,把消息投送到此节点,发送给崔总
5 后面继续,沈剑怎么知道崔总看了呢?
6 崔总看了消息之后,返馈到jx-entry进入层
7 再通过jx-logic逻辑的运算
8 再到router路由层,路由器找到沈剑的登入节点tc-entry是哪个
9 返馈到沈剑的tc-entry层,再告知沈剑
这里会有个问题:消息投送不成功有两种情况,1,消息投送不成功,2消息投送成功了,返馈回来时不成功
所以需要重发机制:沈剑客户端保存一个消息发送队列key,5秒之内没有收到投送成功反馈就重发(重发3次),崔总这边显示端做业务逻辑去重,所以每条消息需要一个唯一的key标识。记里切记不是系统去重,而是显示端做业务逻辑去重。
SMC:系统层面的消息即不丢失,又不重复是不可能的,我们应用层面的逻辑辑去重.
浙公网安备 33010602011771号