XMPP,我所理解,就是基于XML,实现终端到终端的结构化的信息传输协议.,它是一个开源的即时通信协议。它主要包括三部分:客户端、服务器和网关。它们三个任意两者之间都可以实现双向通信。这里,网关主要实现的是不同的服务器之间通信的通道。客户端与服务器建立连接时端口默认使用5222端口,连接过程如下:
ConnectionConfiguration configuration;
configuration = new ConnectionConfiguration(server, 5222);
//这里server就是配置OpenFire服务器时的Host Name:。
Connection connection;
connection = new XMPPConnection(configuration);
connection.connect();
在消息的传输通过TLS(即安全传输协议),保证了数据传输的保密性和安全性,细节方面,应该是对这个xml信息进行加/解密操作吧,我没过多研究了。
P1与P2之间的通信过程是这样的:P1发送一串xml信息(这串信息<message/>信息,里面包含<id/><to/><from/><type><body/>等几个标签)给服务器,服务器接收到这条消息后会,首先会根据JID判断P1、P2是否在同一服务器中,若是则直接发送给已经在线的P2;若不在同一服务器中,会通过网关,将这条消息发送给P2所属服务器,并这条消息发送给P2(对了,<message/>中会包含to标签是P2的邮件地址)。当然,如果当前P2不在线,服务器会保存这些消息到数据库中,待它再次上线后发送过去。
客户端发送即时聊天消息:
Chat chat = cm.createChat(userJID, null); //注册时的邮件地址
chat.sendMessage(strSend);//给userJID发送一串消息:strSend
客户端设置监听其他用户发来消息的处理过程:
ChatManager cm = connection.getChatManager();//对了,要登录一下哦!
然后实例化一个抽象接口ChatManagerListener,并实现chatCreated方法来进行监听:
cm.addChatListener(new ChatManagerListener() {
public void chatCreated(Chat chat, boolean create) {
chat.addMessageListener(new MessageListener() {
public void processMessage(Chat chat, Message msg) {
System.out.println("新消息:");
System.out.println(chat.getParticipant() + ":"
+ msg.getBody());
try {
chat.sendMessage("是啊,我是Joim,我收到了");
} catch (XMPPException e) {
e.printStackTrace();
}
}
});
}});
OK,一个简单的即时通信测试程序就 完成了,可以在Spark上登录另个用户,进行即时通信测试。