本文共 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/