基于XMPP协议和MINA框架的服务器分布式扩展研究
- 格式:pdf
- 大小:269.38 KB
- 文档页数:4
openfire和mina(一)2009-06-04 17:51 2144人阅读评论(3) 收藏举报看了几天的openfire,网上的资料太少了,只有一个国外的网站不错,/,其他的只能自己摸索了。
openfire启动:ServerStarter会加载org.jivesoftware.openfire.XMPPServer在XMPPServer会加载一系列模块其中的ConnectionManagerImpl 是连接模块// Load this module always last since we don't want to start listening for clients // before the rest of the modules have been startedloadModule(ConnectionManagerImpl.class.getName());ConnectionManagerImpl 会启动一系列的监听。
其中的createClientListeners和startClientListeners是我比较关心的,先看看再这里面openfire都做了什么!private void createClientListeners() {// Start clients plain socket unless it's been disabled.if (isClientListenerEnabled()) {// Create SocketAcceptor with correct number of processorssocketAcceptor = buildSocketAcceptor();// Customize Executor that will be used by processors to process incoming stanzasExecutorThreadModel threadModel = ExecutorThreadModel.getInstance("client" );int eventThreads = JiveGlobals.getIntProperty("xmpp.client.processing.threads" , 16);ThreadPoolExecutor eventExecutor =(ThreadPoolExecutor)threadModel.getExecutor();eventExecutor.setCorePoolSize(eventThreads + 1);eventExecutor.setMaximumPoolSize(eventThreads + 1);eventExecutor.setKeepAliveTime(60, TimeUnit.SECONDS );socketAcceptor .getDefaultConfig().setThreadModel(threadModel);// Add the XMPP codec filtersocketAcceptor .getFilterChain().addFirst("xmpp" , new ProtocolCodecFilter(new XMPPCodecFactory()));// Kill sessions whose outgoing queues keep growing and fail to send trafficsocketAcceptor .getFilterChain().addAfter("xmpp" , "outCap ", new StalledSessionsFilter());}}对了这里就是和用的mian框架去做联网处理,首先设置mina框架的线程池,然后把由XMPPCodecFactory做为ProtocolCodecFilter的chain添加到FilterChain中!然后private void startClientListeners(String localIPAddress) {// Start clients plain socket unless it's been disabled.if (isClientListenerEnabled()) {int port = getClientListenerPort();try {// Listen on a specific network interface if it has been set.String interfaceName = JiveGlobals.getXMLProperty("network.interface");InetAddress bindInterface = null;if (interfaceName != null) {if (interfaceName.trim().length() > 0) {bindInterface = InetAddress.getByName(interfaceName);}}// Start accepting connectionssocketAcceptor.bind(new InetSocketAddress(bindInterface, port), new ClientConnectionHandler(serverName));ports.add(new ServerPort(port, serverName, localIPAddress, false, null, ServerPort.Type.client));List<String> params = new ArrayList<String>();params.add(Integer.toString(port));(LocaleUtils.getLocalizedString("startup.plain", params));}catch (Exception e) {System.err.println("Error starting XMPP listener on port " + port + ": " +e.getMessage());Log.error(LocaleUtils.getLocalizedString("admin.error.socket-setup"), e);}}}socketAcceptor.bind(new InetSocketAddress(bindInterface, port), new ClientConnectionHandler(serverName));将ClientConnectionHandler作为数据处理服务器去监听5222端口去了,mina真方便!关于MINA框架可以去网上找找资料,这里就不说了。
xmpp协议详解一:xmpp基本概念概述XMPP是一个开放式的XML协议,设计用于准实时消息和出席信息以及请求-响应服务。
通用的架构通常采用客户端服务器架构进行实现,其中客户端通过TCP方式使用XMPP访问服务器,服务器之间也采用TCP方式进行通信。
xmpp通用架构服务器充当xmpp通信的一个智能抽象层,负责•对受验证的客户端,服务器以及其他实体之间以xml流的形式的连接和会话进行管理。
•在这些实体间使用xml流对合理编址的xml节进行路由•存储和处理客户端使用的数据客户端通过TCP连接直接连接到服务器,并通过xmpp获得由服务器以及联合服务器所提供的全部功能。
多个不同的客户端可以同时登陆并且并发的连接到一个服务器,每个不同资源的客户端通过xmpp地址的资源标识符来区分。
建议的客户端和服务器连接的端口时5222网关网关是一个特殊用途的服务器端的服务,主要功能是把xmpp翻译成外部消息系统,并把返回的消息翻译成xmpp.网络每个服务器都是由一个网络地址来标识的并且服务器之间的通信是客户-服务器协议的直接拓展。
任意两个服务器之间的通信是可选的,如果被激活,那么这种通信应该通过XML流绑定到TCP连接上进行。
建议的服务器和服务器连接的端口时5269注xmpp系统涉及更多的域间连接,当你给不在同一个域中的联系人发送xmpp消息时,你的客户端连接到你的“家用”服务器,然后直接连接到你的联系人的服务器,而没有中间跳过。
地址空间概述因为xmpp通讯实在网络上,所以每个xmpp实体都需要一个地址,称为JabberID(JID)。
一个合法的JID包括一组排列好的元素,包括域名(domain identifier), 节点名(node identifier), 和资源名(resource identifier)。
user@host/resource这种结构,最常用来标识一个即时消息用户,这个用户所连接的服务器,以及这个用户用于连接对资源。
xmpp协议详解摘要:此文档定义了可扩展消息出席协议(XMPP)的核心特性:协议使用XML元素在任意两个网络端点间近实时的交换结构化信息。
当XMPP为交换XML数据提供一般化,可扩展的框架时,它主要用于建立满足RFC2779的即时消息与出席应用的需求。
1 介绍1.1 概要XMPP是一个开放的可扩展标记语言[XML]协议,用于近实时的消息、出席与请求-响应服务。
基本语法语义最初是由Jabber开源社区在1999年开发的。
2002年,XMPP工作组授权开发一个Jabber协议的改写本,将适用于IETF的即时消息(IM)与出席技术。
作为XMPP工作组的成果,此文档定义了XMPP 1.0的核心内容;提供即时消息与出席功能的扩展需求定义在RFC2779[IM-REQS]中,由XMPP:即时消息与出席[XMPP-IM]指定。
1.2 术语文档中的大写关键字:"MUST", "MUST NOT", "REQUIRED", "SHALL", "SHALL NOT", "SHOULD", "SHOULD NOT", "RECOMMENDED", "MAY", "OPTIONAL"在BCP14, 在RFC 2119 [TERMS]中描述。
2 一般架构2.1 概述虽然XMPP并未与任何特定网络架构结合,但到目前为止,它大致上已经由一个客户-服务器的架构实现了。
其中,客户端利用XMPP访问基于[TCP]连接的一个服务器,并且,服务器间也通过TCP连接进行彼此间的通信。
XMPPClient------------Server------------ServerTCP TCP下图为此架构的高层视图(“-”表示使用XMPP通信,“=”表示使用任何其它协议通信)C1----S1---S2---C3|C2----+--G1===FN1===FC1符号表示如下:1)C1,C2,C3 = XMPP客户端2)S1,S2 = XMPP服务器3)G1 = 网关:在XMPP与外部协议(非XMPP)的消息网络间转换。
通信协议-物联网通信协议全解析导读我们都知道,物联网存在着许多通信协议。
本文将重点介绍几个常见的物联网通信协议,它们具有不同的性能、数据速率、覆盖范围、功率和内存……我们都知道,物联网存在着许多通信协议。
本文将重点介绍几个常见的物联网通信协议,它们具有不同的性能、数据速率、覆盖范围、功率和内存……物联网通信协议全解析物联网通信协议分为两大类:一类是接入协议:一般负责子网内设备间的组网及通信一类是通讯协议:主要是运行在传统互联网TCP/IP协议之上的设备通讯协议,负责设备通过互联网进行数据交换及通信。
一、物理层、数据链路层协议1、远距离蜂窝通信(1)2G/3G/4G通信协议,分别指第二、三、四代移动通信系统协议。
(2)NB-IoT窄带物联网(NarrowBandInternetofThings,NB-IoT)成为万物互联网络的一个重要分支。
NB-IoT构建于蜂窝网络,只消耗大约180kHz的带宽,可直接部署于GSM网络、UMTS网络或LTE网络,以降低部署成本、实现平滑升级。
NB-IoT聚焦于低功耗广覆盖(LPWA)物联网(IoT)市场,是一种可在全球范围内广泛应用的新兴技术。
具有覆盖广、连接多、速率快、成本低、功耗低、架构优等特点。
应用场景:NB-IoT网络带来的场景应用包括智能停车、智能消防、智能水务、智能路灯、共享单车和智能家电等。
(3)5G第五代移动通信技术,是最新一代蜂窝移动通信技术。
5G的性能目标是高数据速率、减少延迟、节省能源、降低成本、提高系统容量和大规模设备连接。
应用场景:AR/VR、车联网、智能制造、智慧能源、无线医疗、无线家庭娱乐、联网无人机、超高清/全景直播、个人AI辅助、智慧城市。
2、远距离非蜂窝通信(1)WiFi由于前几年家用WiFi路由器以及智能手机的迅速普及,WiFi协议在智能家居领域也得到了广泛应用。
WiFi协议最大的优势是可以直接接入互联网。
相对于ZigBee,采用Wifi协议的智能家居方案省去了额外的网关,相对于蓝牙协议,省去了对手机等移动终端的依赖。
GMPP协议及其服务器端的Openfire插件开发GMPP背景知识GMPP是一种基于GML的协议,它继承了在 GML环境中灵活的发展性。
因此,基于GMPP的应用具有超强的可扩展性。
绊过扩展以后的GMPP可以通过发送扩展的信息来处理用户的需求,以及在GMPP的顶端建立如内容发布系统和基于地址的服务等应用程序。
而且,GMPP包含了针对服务器端的软件协议,使乊能不另一个进行通话,这使得开发者更容易建立客户应用程序戒给一个配好系统添加功能。
GMPP (可扩展消息处理现场协议)是基于可扩展标记语言(GML )的协议,它用于即时消息(IM )以及在线现场探测。
它在促进服务器乊间的准即时操作。
这个协议可能最终允许因特网用户向因特网上的其他任何人发送即时消息,即使其操作系统和浏览器丌同。
GMPP的前身是Jabber,一个开源形式组织产生的网络即时通信协议。
GMPP目前被IETF国际标准组织完成了标准化工作。
标准化的核心绌果分为两部分;核心的GML流传输协议基于GMLFreeEIM流传输的即时通讯扩展应用 GMPP的核心GML流传输协议的定义使得GMPP 能够在一个比以往网络通信协议更规范的平台上。
借劣于GML易于解析和阅读的特性,使得 GMPP的协议能够非常漂亮。
GMPP的即时通讯扩展应用部分是根据IETF在这乊前对即时通讯的一个抽象定义的,不其他业已得到广泛使用的即时通讯协议,诸如AIM,QQ等有功能完整,完善等先进性。
GMPP的扩展协议Jingle 使得其支持语音和视频。
基本网络结构GMPP中定义了三个角色,客户端,服务器,网关。
通信能够在这三者的任意两个之间双向发生。
服务器同时承担了客户端信息记录,连接管理和信息的路由功能。
网关承担着不异构即时通信系统的互联互通,异构系统可以包括SMS (短信),MSN,ICQ等。
基本的网络形式是单客户端通过 TCP/IP连接到单服务器,然后在乊上传输 GML。
功能传输的是不即时通讯相关的指令。
XMPP服务器的性能分析跟优化XMPP服务器的性能分析和优化常用的的XMPP服务器:1.openfire:底层通讯采用的mina框架,minak框架其实性能一般,netty早已经超越它,虽然最初都是Doug Lea写的。
3.4版本之后支持集群,单台服务器测试最大支持30万用户并发,服务器配置(服务器是Dell R710, 64G内存 16核CPU,15000转硬盘),缺点是大规模并发时集群效果不是很好。
性能优化学习:/smm11230704/article/details/74680102.tigase:1)底层通讯是自己写的一个NIO通讯框架,最高并发连接可达到单机50w,支持集群(可以根据需要进行水平扩展),个人感觉这个比较靠谱。
部署学习:/blog/14880702).Tsung负载测试Tigase:/blog/16057073)典型案例:Zoosk,是一个具有5000万会员的浪漫的社交约会网站4)详解Zoosk千万用户实时通信背后的开源技术:/article/2012-09-10/2809790-zoosk-the-engineering-behind-real-time5)缺点:集群方式复杂–但是tigase 作者维护很活跃,集群测试结果能够支撑比较大的容量,这是吸引人的地方。
但经过实际生产运营情况来看,由于其集群方案实现的复杂性,以及单节点容量的有限,对支撑到 50 万用户在集群节点上可能没有信心,所以在到达 50 万用户之前,自己要准备替代方案。
6)扩展:可以创建一些自定义的扩展,来处理特定的业务逻辑。
7)tigase官方网站吸引人的地方:/Cluster with over 1mln online users.–集群支持一亿个用户在并发500k online users on a single machine.–50万个用户并发单机Great at XMPP service sharding.Running happily with 10MB of RAM.Long list of supported features.Scripting support for all major languages.All tests results are publicly available.Very flexible and extensible API.Monitoring via HTTP, SNMP, JMX, XMPP.。
基于MINA开发高性能网络应用程序——以实现XMPP协
议Openfire3.3.3为例
剧忻;苗放
【期刊名称】《重庆理工大学学报(自然科学版)》
【年(卷),期】2008(022)010
【摘要】介绍了XMPP协议、Openfire开源项目以及MINA框架.研究Openfire3.3.3中如何使用MI-NA框架部分,对服务器端监听连接、XMPP协议编解码类、业务实现逻辑类、简单的通信统计实现、Openfire的启动等进行分析.结果表明,MINA作为网络I/O操作层的框架,能够很简单方便地开发高性能的网络应用程序.
【总页数】6页(P121-125,160)
【作者】剧忻;苗放
【作者单位】成都理工大学信息工程学院,成都,610059;成都理工大学信息工程学院,成都,610059
【正文语种】中文
【中图分类】TP39
【相关文献】
1.基于XMPP协议的数字家庭网络可视电话设计与实现 [J], 张勇
2.基于LINQ的课程网络资源平台的设计与实现——以《.NET动态网站开发》课程为例 [J], 孙翠华;胡元军;戈勇
3.统计引擎实现基于IP网络的更高性能可提高网络处理器周期需求90%,使系统设计师开发出新的增值服务和功能 [J],
4.基于Java非阻塞I/O开发高性能网络应用程序 [J], 程超;杨风召
5.基于学习对象的网络课程的开发实现与测试——以大学课程《数据结构》为例[J], 刘永福
因版权原因,仅展示原文概要,查看原文内容请购买。