博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
XMPP - 实现即时通讯相关库
阅读量:4291 次
发布时间:2019-05-27

本文共 3667 字,大约阅读时间需要 12 分钟。

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("jsmith@jivesoftware.com").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();

转载地址:http://pdegi.baihongyu.com/

你可能感兴趣的文章
高并发环境下,先操作数据库还是先操作缓存?
查看>>
MySQL Explain详解
查看>>
一直搞不清楚什么是读写分离,主从复制的原理,今天总算搞懂了
查看>>
消息队列 mq 必会面试题
查看>>
线程池的工作原理是啥?能手写一个线程池吗?
查看>>
Java程序内存的简单分析
查看>>
Javascript单例模式概念与实例
查看>>
SQL NULL 函数
查看>>
多例设计模式
查看>>
WebView的JavaScript与本地代码三种交互方式
查看>>
WebView的JavaScript与本地代码三种交互方式
查看>>
Android Studio里面配置Tesseract
查看>>
深入浅出JavaScript之this
查看>>
Android include标签的使用注意事项
查看>>
final成员变量和final局部变量
查看>>
Android数据加密之异或加密算法
查看>>
greenDao好的示例网址
查看>>
Android自定义控件--仿安全卫士中的一键加速
查看>>
Android Tools Attributes,让布局设计所见即所得
查看>>
Android内存泄露的原因
查看>>