zoukankan      html  css  js  c++  java
  • 关于即时通讯协议设计的问题 望和大家讨论一下


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

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

    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都要搜索路由表,这样消耗很大;如果设计了缓存,那么缓存超时等等机制会比较复杂。

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

  • 相关阅读:
    XidianOJ 1099 A simple problem
    XidianOJ 1097 焊板子的xry111
    XidianOJ 1172 Hiking
    XidianOJ 1176 ship
    bzoj1912(树的直径)
    黑暗城堡(最短路径树)
    poj1639(k限制最小生成树)
    0-1分数规划
    tyvj1391(Kruskal)
    [Usaco2007 Nov]Cow Relays(矩阵乘法+floyd)
  • 原文地址:https://www.cnblogs.com/zc22/p/1757959.html
Copyright © 2011-2022 走看看