Openfire是怎么实现连接请求的? XMPPServer.start()方法,完成Openfire的启动.但是,XMPPServer.start()方法中,并没有提及如何监听端口,那么Openfire是如何接收客户端的请求? 因为Openfire的核心功能,是通过Module来管理的,那么对应的连接管理应该就在Module中. 查看在XMPPServer.loadModules()方法中,有如下代码: //Load this module always last since we don't…
什么是会话? A拨了B的电话 电话接通 A问道:Are you OK? B回复:I have a bug! A挂了电话 这整个过程就是会话. 会话(Session)是一个客户与服务器之间的不中断的请求响应序列.注意其中“不中断”一词. Openfire的通信,是以服务器为中转站的消息转发机制,客户端与服务器要实现通信,必须保持连接,即持有会话.Session的管理,集中在SessionManager模块中. SessionManager SessionManager提供了一系统与Session生…
引言 宇宙大爆炸,于是开始了万物生衍,从一个连人渣都还没有的时代,一步步进化到如今的花花世界. 然而沧海桑田,一百多亿年过去了…. 好复杂,但程序就简单多了,main()函数运行,敲个回车,一行Hello World就出来了,所以没事多敲敲回车,可以练手感…. 一.程序入口 Java的程序入口是main方法,Openfire也不例外.可以全局检索一下”void main”,可以看到,Openfire的main函数有两个: (1)org.jivesoftware.openfire.launcher…
两个人的孤独 两个人的孤独,大抵是,你每发出去一句话,都要经由无数网络.由几百个计算机处理后,出在他的面前,而他就在你不远处. 连接管理之后 Openfire使用MINA网络框架,并设置ConnectionHandler为MINA的处理器,连接的启停.消息的收发,都在这个类中做中转.这是我们上一篇文章分析的内容. 那么,消息到了ConnectionHandler之后,是如何实现路由的,本文来一探究竟. ConnectionHandler类,MINA的处理器 ConnectionHandler是个…
前言 在第六章<路由表>中,客户端进行会话时,首先要获取对方的Session实例.获取Session实例的方法,是先查找本地路由表,若找不到,则通过路由表中的缓存数据,由定位器获取. 路由表中的缓存,如下: public RoutingTableImpl() { super("Routing table"); serversCache = CacheFactory.createCache(S2S_CACHE_NAME); componentsCache = CacheFac…
 引言 目前互联网产品使用的即时通信协议有这几种:即时信息和空间协议(IMPP).空间和即时信息协议(PRIM).针对即时通讯和空间平衡扩充的进程开始协议SIP(SIMPLE)以及XMPP.PRIM与XMPP.SIMPLE类似,但已经不再使用了. 本次要讲的是XMPP,由Openfire实现. 1.Openfire与XMPP Openfire是开源的实时协作服务器(RTC),它是基于公开协议XMPP(RFC-3920),并在此基础上实现了XMPP-IM(RFC-3921),扩展了IM功能,对实施…
还是从会话管理说起 上一章,Session经过预创建.认证之后,才正常可用.认证时,最重要的操作,就是将Session加入到路由表,使之拥用了通信功能. 添加到至路由表的操作,是在SessionManager中操作的,如下: SessionManager.addSession(LocalClientSession session): public void addSession(LocalClientSession session) { // Add session to the routing…
前言 写这章之前,我犹豫了一会.在这个时候提集群,从章节安排上来讲,是否合适?但想到上一章<路由表>的相关内容,应该不至于太突兀.既然这样,那就撸起袖子干吧. Openfire的单机并发量,一直是一个比较含糊的东西,即使官方也没有很清楚的介绍.但按我自已评估,以4核.8G内存这样的机器配置,5万+的并发应问题不大.而当用户体量逐步上涨,前期可以通过扩容的方式提升性能,但若体量足够大,如几十万并发,单机的扩容已不是首选的方案,一来考虑性价比,二来如果整套系统跑在一台机器上,出现异常可能会波及所有…
Openfire是怎么实现连接请求的? XMPPServer.start()方法,完成Openfire的启动.但是,XMPPServer.start()方法中,并没有提及如何监听端口,那么Openfire是如何接收客户端的请求? 因为Openfire的核心功能,是通过Module来管理的,那么对应的连接管理应该就在Module中. 查看在XMPPServer.loadModules()方法中,有如下代码: //Load this module always last since we don't…
http://blog.sina.com.cn/s/blog_7325f5150101bafh.html 一. Openfire Connection Manager 简介 Openfire Connection Manager 是 Openfire 服务器的扩展,它可以透明的处理大规模并发 XMPP 客户端对 Openfire 服务器的联接.根据 Connection Manager 主页介绍,每个 Connection Manager 可以处理至少五千个并发用户.图 1 表示 Openfir…