首页
Web开发
Windows程序
编程语言
数据库
移动开发
系统相关
微信
其他好文
会员
首页
>
其他好文
> 详细
XMPP - 实现即时通讯相关库
时间:
2016-05-12 19:07:57
阅读:
261
评论:
0
收藏:
0
[点我收藏+]
标签:
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();
XMPP - 实现即时通讯相关库
标签:
原文地址:http://blog.csdn.net/u011216417/article/details/51356588
踩
(
0
)
赞
(
0
)
举报
评论
一句话评论(
0
)
登录后才能评论!
分享档案
更多>
2021年07月29日 (22)
2021年07月28日 (40)
2021年07月27日 (32)
2021年07月26日 (79)
2021年07月23日 (29)
2021年07月22日 (30)
2021年07月21日 (42)
2021年07月20日 (16)
2021年07月19日 (90)
2021年07月16日 (35)
周排行
更多
分布式事务
2021-07-29
OpenStack云平台命令行登录账户
2021-07-29
getLastRowNum()与getLastCellNum()/getPhysicalNumberOfRows()与getPhysicalNumberOfCells()
2021-07-29
【K8s概念】CSI 卷克隆
2021-07-29
vue3.0使用ant-design-vue进行按需加载原来这么简单
2021-07-29
stack栈
2021-07-29
抽奖动画 - 大转盘抽奖
2021-07-29
PPT写作技巧
2021-07-29
003-核心技术-IO模型-NIO-基于NIO群聊示例
2021-07-29
Bootstrap组件2
2021-07-29
友情链接
兰亭集智
国之画
百度统计
站长统计
阿里云
chrome插件
新版天听网
关于我们
-
联系我们
-
留言反馈
© 2014
mamicode.com
版权所有 联系我们:gaon5@hotmail.com
迷上了代码!