即时通讯原理

来源:互联网 发布:用波士顿矩阵分析华为 编辑:程序博客网 时间:2024/04/28 12:20

(公网中的P2P聊天,服务器是具有固定IP的)
基本思路是:
A登录S后,A取所有的好友列表,取到好友B时:
 1、S告诉B,好友A上线啦(S将A的公网IP也告诉B),这时B发一个给A的打洞包。
 2、A取回好友B后,就向好友B发一个数据[打洞]。  
        即:A-->S:  
                  S   to   B,B   to   A  
                  S   to   A,A   to   B            
   
注意:  
NAT的SESSION问题(超时),应该定时发一定的数据维护NAT上的SESSION,以使这种"连接"长期有效。 
解释:  
所谓的打洞就是发一个数据(内容不限,可为1字节也行)给对方,先不考虑能否收到,而是建立一条直接连接通道

 
条件:当A和B都通过S取得对方的公网IP之后,如A(211.85.11.42:3001),B(202.115.144.33:4001)

打洞过程:
1、A登录到S,S通知B,B发打洞数据给A,形如B.Socket.SendDate(A.IP,A.PORT,任意一小段数据)
这时A的网关会丢弃掉来自B的数据,因为B是不请自来的,但重要的是,在B的网关上已经加了一条B到A的NAT SESSION。
B网关NAT的理解为:是你B主动往A上发送数据的哈,以后如果A要是发数据来,我就传给你啦!
2、A取回好友B的信息回来后,发一条打洞数据给B,(之前B已经发了打洞数据给A,且时间不宜过长),这时B会收到来自A的数据了。因为(见1),并且在A的网关上产生了一条A到B的NAT SESSION,以后大家可以互通啦

原创粉丝点击