Tigase进行即时通讯的实现

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系统。

  • 4
    点赞
  • 8
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

陈大侠在江湖

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值