问:如何设计安全通讯

 

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

方案二:防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:系统层面的消息即不丢失,又不重复是不可能的,我们应用层面的逻辑辑去重.

 

posted on 2020-10-26 17:00  一天的PHP之路  阅读(136)  评论(0)    收藏  举报