XMPP - 实现即时通讯相关库

XMPP : 是即时通讯协议,基于 XML .

Openfire :是一个 XMPP 协议的Java实现的IM服务器程序,底层使用 Mina 框架。

基于环信 IM 长连接技术,支持亿级用户同时在线。

基于WEB的即时消息传输平台,原来的JiveMessenger.

开源的实时协作RTC服务器,基于XMPP协议,构建高效率的通信服务器。利用WEB进行管理。

Smack :是开源、易于使用的 XMPP(jabber) 客户端类库。java写的xmpp客户端代码库。是 Spark 的核心代码。接收消息,监听器

优点:编程简单

缺点:每个客户要1个线程,占用资源大。

XMPPConnection connection = new XMPPConnection("jabber.org");

connection.login("mtucker","password");

connection.createChat("[email protected]").sendMessage("Howdy!");

Asmack :2010年初,A 代表Android版本的 Smack 的android版本。精简后的 smack 开发包。

Spark : 即时通讯客户端,是开源项目。Java 编写。代码实现采用smark类库。客户端采用 Spark 服务器采用 Openfire 是比较通用和常见实现

即时通讯系统的框架。

AndroidPN : Android Push Notification.

关于持久化连接的实现:1,基于IBM的 MQTT 。2,基于 XMPP实现。

Mina :Apache MINA(Multipurpose Infrastructure for Network Applications),当前支持java NIO 技术的 TCP/UDP

应用程序开发、串口通讯程序,所支持的正在进一步扩展中。

包含4个jar包:mina-core.jar
slf4j-log4j.jar slf4j-api.jar
log4j.jar

//

//服务端

//

private static Logger logger = Logger.getLogger(DemoServer.class);//日志类的实现

NioSocketAcceptor acceptor = new NioSocketAcceptor();//创建一个非阻塞的Socket

acceptor.getFilterChain().addLast("codec",

new ProtocolCodecFilter(new TextLineCodecFactory(Charset.forName("UTF-8"),

LineDelimiter.WINDOWS.getValue(),

LineDelimiter.WINDOWS.getValue())

));//设置过滤器,(使用mina提供的文本换行符编解码器)

acceptor.getFilterChain().addLast("keeplive",new keepAliveFilter(new ServerKeepAliveMessageFactoryImp()

,IdleStatus.READ_IDLE

,KeepAliveRequestTimeoutHandler.CLOSE

,10

,5));

// acceptor.getFilterChain().addLast("codec",new ProtocolCodecFilter(new CharsetCodescFactory()));

//自定义的编解码器。

acceptor.getSessionConfig().setReadBufferSize(2048);//设置读取数据的缓冲区的大小

acceptor.getSessionConfig().setIdleTime(IdleStatus.BOTH_IDLE,10);//读取通道10秒内误操作进入空闲状态

acceptor.setHandler(new Demo1Serverhandler());//为接收器设置管理服务

acceptor.bind(new InetSocketAddress(PORT(自己定义的端口号)));//绑定端口

logger.info("服务器启动 。。。");

public class Demo1Serverhandler extends IoHandlerAdapter{

public static Logger logger = Logger.getLogger(Demo1Serverhandler.class);

@override

public void messageReceived(IoSession session,Object message) throws Exception{

String msg = message.toString();

if("exit".equals(msg)){

session.close(true);

}

Date date = new Date();

session.write(date);

logger.info("服务器接收信息成功。");

super.messageReceived(session,message);

}

@override

public void sessionClosed(IoSession session) throws Exception{

logger.info("服务器与客户端断开连接");

super.sessionClosed(session);

}

@override

public void sessionOpened(IoSession session) throws Exception{

logger.info("服务器与客户端连接打开。。。。");

super.sessionIdle(session,status);

}

@override

public void sessionIdle(IoSession session,IdleStatus status) throws Exception{

logger.info("进入空闲状态。。。");

super.sessionIdle(session,status);

}

@override

public void exceptionCaught(IoSession session,Throwable cause) throws Exception{

logger.info("服务器发送异常。。。");

super.exceptionCaught(session,cause);

}

}

//

//客户端

//

IoConnector connector = new NioSocketConnector();

connector.setConnectTimeoutMillis(30000);//设置超时

//添加过滤器

// connector.getFilterChain().addLast("codec",new ProtocolCodecFilter(new CharsetCodescFactory()));

connector.getFilterChain().allLast("codec",new ProtocolCodecFilter(

new TextLineCodecFactory(Charset.forName("UTF-8"),LineDelimiter.WINDOWS.getValue(),LineDelimiter.WINDOWS.getValue())

));

ConnectFuture future = connector.connect(new InetSocketAddress(ConstantUtils.WEB_MATCH_PACH

,ConstantUtils.WEB_MATCH_PORT));//创建连接

future.awaitUninterruptibly();//等待连接创建完成

session = future.getSession();//获得session

session.write("start");

session.getCloseFuture().awaitUninterruptibly();//等待连接断开

connector.dispose();

//拿到所有客户端的 Session。

Collection<IoSession> sessions = session.getService().getManagedSessins().values();

时间: 2024-10-05 03:10:00

XMPP - 实现即时通讯相关库的相关文章

Android学习笔记--基于XMPP的即时通讯

一.常见即时通讯实现 socket openfire+asmack 环信 信鸽 融云 二.XMPP优势 1. 开放性 XMPP协议是自由.开放.公开的,并且易于了解.而且在客户端.服务器.组件.源码库等方面,都已经各自有多种实现. 2.跨平台 客户端只要基于XMPP协议,不管是什么平台(包括不同的移动终端)都可以互联互通. 三.XMPP协议简介 The Extensible Messaging and Presence Protocol (可扩展通讯和表示协议) XMPP 以 Jabber 协议

Android基于xmpp的即时通讯应用

xmpp是一个通信协议.因为这是个开放的协议,为了节俭开发成本,很多即时应用都采用了这个协议.Android上最常用的组合asmack +openfire.Asmack是smack的android版,是对xmpp协议进行了封装,并提供了丰富的api,简化了操作.Openfire是一个开源的IM服务器,基于Xmpp实现.换句话说使用xmpp开发即时通讯应用的话,服务器端已经开发好了,就是openfire. 现在我做的一个android应用就是采用asmack+openfire.说实在的,xmpp协

Android基于XMPP的即时通讯2-文件传输

本文是在上一篇博文Android基于XMPP的即时通讯1-基本对话的基础上,添加新的功能,文件传输 1.初始化文件传输管理类 public static FileTransferManager getFileTransferManager() { if (fileManager == null) { ServiceDiscoveryManager sdManager = ServiceDiscoveryManager .getInstanceFor(connection); if (sdMana

Android基于XMPP的即时通讯3-表情发送

这篇博文主要讲表情发送的一些东西. 参考:Android基于XMPP的即时通讯1-基本对话 1.准备好资源文件 采用的是emoji的表情,我打包好了,下载地址:http://files.cnblogs.com/files/pear-lemon/drawable.zip 2.表情布局文件layout_send_emotion.xml <?xml version="1.0" encoding="utf-8"?> <RelativeLayout xmln

[Python]实现XMPP协议即时通讯发送消息功能

#-*- coding: utf-8 -*- __author__ = 'tsbc' import xmpp import time #注意帐号信息,必须加@域名格式 from_user = '[email protected]' password = 'a1b2c3d4' #可以添加多个接收人 to_user = ['[email protected]'] msg = "您好!这是条测试信息!" def to_msg(): """ 基于xmpp协议的即时

iOS之即时通讯相关理解

Socket: 1>Socket又称"套接字” 2>网络上的两个程序通过一个双向的通信连接实现数据的交换,这个连接的一端称为一个socket. 3>应用程序通常通过"套接字"向网络发出请求或者应答网络请求 网络通信的要素: 1>网络上的请求就是通过Socket来建立连接然后互相通信 2>IP地址(网络上主机设备的唯一标识) 3>端口号(定位程序) 4>用于标示进程的逻辑地址,不同进程的标示 5>有效端口:0~65535,其中0~

Android基于XMPP的即时通讯

闲暇之余,自己写了个简单的即时通讯,基于OpenFire服务器平台. 整个项目包括两个部分,一个是服务器端,一个是android手机端: 一.关于服务器端没什么好说的,下载安装配置即可 推荐下载带jar的程序安装,配置好java_jdk的可以使用压缩包解压安装 OpenFire下载地址:http://www.igniterealtime.org/downloads/index.jsp 顺便下载一个Spark,电脑端通讯,用于和你的安卓手机互发信息. 运行openFire截图 openfire的后

Android之基于XMPP协议即时通讯软件

http://blog.csdn.net/way_ping_li/article/details/17385379 http://git.oschina.net/way/XMPP

WebSocket集成XMPP网页即时通讯1:Java Web Project服务端/客户端Jetty9开发初探

Web 应用的信息交互过程通常是客户端通过浏览器发出一个请求,服务器端接收和审核完请求后进行处理并返回结果给客户端,然后客户端浏览器将信息呈现出来,这种机制对于信息变化不是特别频繁的应用尚能相安无事,但是对于那些实时要求比较高的应用来说,比如说在线游戏.在线证券.设备监控.新闻在线播报.RSS 订阅推送等等,当客户端浏览器准备呈现这些信息的时候,这些信息在服务器端可能已经过时了.所以保持客户端和服务器端的信息同步是实时 Web 应用的关键要素,对 Web 开发人员来说也是一个难题.在 WebSo