美文网首页
openfire离线消息处理流程

openfire离线消息处理流程

作者: Ericxujun | 来源:发表于2018-09-19 10:00 被阅读0次

    1.由org.jivesoftware.openfire.nio.ConnectionHandler里的public void messageReceived(IoSession session, Object message)方法接收发送方的消息

            从当前session中获取StanzaHandler的实例对象handler,并用handler的process(String stanza, XMPPPacketReader reader)方法,然后用void process(Element doc),该方法根据消息的类别(error,message,presence,iq)作 不同处理,这里是走message的处理逻辑

    2.步骤1进入org.jivesoftware.openfire.net.StanzaHandler类中的protected void processMessage(Message packet)方法,该方法用来处理收到的消息包,该方法的注释说注册了接口org.jivesoftware.openfire.interceptor.PacketInterceptor

    的方法会被调用---在数据包被路由之前和之后

    3.步骤2中会调用org.jivesoftware.openfire.spi.PacketRouterImpl类中的void route(Message packet),该方法又调用了org.jivesoftware.openfire.MessageRouter类中的void route(Message packet),该方法的注释:执行真正的数据包路由,路由通常被认为是很快的,但是实际情况下如果需要很长时间来完成路由,为了让该方法能够迅速返回,这时需要通过另起一个线程来完成路由操作。

    4.org.jivesoftware.openfire.interceptor.InterceptorManager拦截器管理器执行具体的拦截操作(拦截的处理顺序与拦截器加入的顺序相关)

    5.接下去调用org.jivesoftware.openfire.spi.RoutingTableImpl类里的void routePacket(JID jid, Packet packet, boolean fromServer)

    该方法的官方注释

    6.最后执行路由失败的逻辑

    相关文章

      网友评论

          本文标题:openfire离线消息处理流程

          本文链接:https://www.haomeiwen.com/subject/mswzgftx.html