关于即时通讯协议设计的问题 望和大家讨论一下


最近在写即时通讯服务器的时候,遇到了一个两难的问题,就是关于通讯协议中会话的设计。

首先先说说现有的一些协议设计:

 

1. Msn、Sip、Fetion(SIP)

这种协议中,双方要建立会话,首先会发出一个建立会话请求,以下以一个SIP对话为例:

 

首先向服务器发送一个INVITE,之后收到了OK才能进行对话。MSN的协议设计也是一样,不过MSN会INVITE之后开启一个新的socket进行对话。

这种协议设计,比较容易设计服务器架构,当服务器接收到INVITE之后,能够在建立双方的SocketConnection建立一个会话缓存,提高性能。

但是这种设计客户端就很麻烦,每次发送信息之前,首先客户端要查询是否已经建立了会话,如果没有就要重新建立。

 

2. QQ,Gtalk(XMPP) 协议

这种协议设计是在会话的message中制定了接收对象,因此不需要发送建立会话的请求,例如xmpp协议:

  SEND: <message to′sd@jabber.org′>
     <body>Where are you?</body>

     </message>

只要制定了mesasge的接收方,客户端可以直接发送信息。 

这种协议设计,客户端会非常简单,可是服务端设计就很麻烦,如果不缓存会话双方,每次客户端的message都要搜索路由表,这样消耗很大;如果设计了缓存,那么缓存超时等等机制会比较复杂。

 

希望大家能够帮提出一些解决思路。谢谢! 

 

posted @ 2010-06-13 18:57    阅读(813)  评论(0编辑  收藏  举报
IT民工