Tigase介绍
它是基于XMPP协议开发的服务器,与openfire类似,但是tigase单台服务器能承受的在线人数远远大于openfire。
XMPP与MQTT协议介绍
XMPP(可扩展消息处理现场协议)是基于可扩展标记语言(XML)的协议,它用于即时消息(IM)以及在线现场探测。它在促进服务器之间的准即时操作。这个协议可能最终允许因特网用户向因特网上的其他任何人发送即时消息,即使其操作系统和浏览器不同。
实时上即时通讯的协议不仅仅只有xmpp,还有其它的,比如MQTT协议(遥信消息队列传输),不过MQTT多数在物联网使用,MQTT是通过发布/订阅实现。
安装Tigase
首先到官网下载[https://tigase.net/downloads],安装Tigase之前要安装JDK和Mysql数据库,下载后进入win-stuff文件夹,运行Setup.bat进行设置,访问localhost:8080进行配置。可以进入主目录的wrapper.exe进行运行。
通过smack进行使用
导入maven
<dependency>
<groupId>org.igniterealtime.smack</groupId>
<artifactId>smack-im</artifactId>
<version>4.3.4</version>
</dependency>
<dependency>
<groupId>org.igniterealtime.smack</groupId>
<artifactId>smack-extensions</artifactId>
<version>4.3.4</version>
</dependency>
<dependency>
<groupId>org.igniterealtime.smack</groupId>
<artifactId>smack-experimental</artifactId>
<version>4.3.4</version>
</dependency>
<dependency>
<groupId>org.igniterealtime.smack</groupId>
<artifactId>smack-tcp</artifactId>
<version>4.3.4</version>
</dependency>
<dependency>
<groupId>org.igniterealtime.smack</groupId>
<artifactId>smack-java7</artifactId>
<version>4.3.4</version>
</dependency>
实现
public class TigaseUtil {
//连接
public static XMPPTCPConnection conn() {
XMPPTCPConnectionConfiguration configuration = null;
XMPPTCPConnection xmppConnection=null;
try {
configuration = XMPPTCPConnectionConfiguration.builder()
.setHost("127.0.0.1")
.setPort(5222)
.setXmppDomain("localhost")
.setSecurityMode(ConnectionConfiguration.SecurityMode.disabled)
.build();
xmppConnection = new XMPPTCPConnection(configuration);
xmppConnection.connect();
System.out.println("---连接到tigase---");
} catch (Exception e) {
e.printStackTrace();
}
return xmppConnection;
}
//关闭连接
public static void closeConnetion(XMPPTCPConnection xmppConnection){
if (xmppConnection!=null){
xmppConnection.disconnect();
System.out.println("---断开tigase---");
}
}
//创建账号
public static boolean createAccount(XMPPTCPConnection conn,String username,String password){
AccountManager.sensitiveOperationOverInsecureConnectionDefault(true);
boolean b=false;
if (conn==null){
return b;
}
try {
AccountManager.getInstance(conn).createAccount(Localpart.fromOrThrowUnchecked(username),password);
b=true;
} catch (Exception e) {
e.printStackTrace();
}
return true;
}
}
调用TigaseUtil的createAccount()创建两个账号后,我们进行账号间的通讯
public class TigaseSend {
public static void main(String[] args) {
XMPPTCPConnection conn = TigaseUtil.conn();
try {
//登录
conn.login("user1","123456");
ChatManager chatManager = ChatManager.getInstanceFor(conn);
//创建chat对象指定接收的对象
Chat chat = chatManager.chatWith(JidCreate.entityBareFrom("user2@localhost"));
chat.send("test");
} catch (Exception e) {
e.printStackTrace();
}finally {
TigaseUtil.closeConnetion(conn);
}
}
}
接收消息
public class TigaseRecieve {
public static void main(String[] args){
XMPPTCPConnection conn = TigaseUtil.conn();
try {
conn.login("user2","123456");
ChatManager.getInstanceFor(conn).addIncomingListener(new IncomingChatMessageListener() {
@Override
public void newIncomingMessage(EntityBareJid entityBareJid, Message message, Chat chat) {
System.out.println(message.getBody());
}
});
Thread.sleep(10*1000);
} catch (Exception e) {
e.printStackTrace();
}
}
}
这里简单的介绍了通过smack连接,进行登录,发送消息,其它的可以查看文档[https://download.igniterealtime.org/smack/docs/latest/javadoc/]
结语
通过xmpp协议以及Tiagse服务器我们就可以自己搭建IM系统了,有兴趣的小伙伴可以自己实现一个完整的im系统。