tigase 安装及基本开发

2024-03-19 22:48
文章标签 安装 开发 基本 tigase

本文主要是介绍tigase 安装及基本开发,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

 

参考:http://docs.tigase.org/tigase-server/snapshot/Administration_Guide/html/#manualinstall

1.下载server的包(http://www.tigase.net/downloads)

2.解压tar -xzvf tigase-server-x.y.z-bv.tar.gz

3.chmod u+x ./scripts/tigase.sh

4.修改两个配置文件:tigase.conf和init.properties:

修改tigase.conf中的

JAVA_HOME="${JDKPath}"

JAVA_HOME="${JAVA_HOME}"

修改init.properties内容(下面是最基本的,后面根据需要添加):

config-type=--gen-config-def

--admins=admin@192.168.43.146

--virt-hosts = 192.168.43.146

--debug=server

--user-db=mysql

--user-db-uri=jdbc:mysql://localhost:3306/tigasedb?user=root&password=root&useUnicode=true&characterEncoding=UTF-8&autoCreateUser=true

5.初始化数据库(root/root为数据库账号密码):

./scripts/db-create-mysql.sh root root

6.启动tigase server:

./scripts/tigase.sh start etc/tigase.conf

7.通过查看日志来确认启动是否正常:

tail -f ./logs/tigase.log.0

之后就可以通过各种client(http://xmpp.org/software/clients.html),例如spark和psi等连接server

一些常见的问题:

1.如何进行扩展

只需要添加下面的一些maven依赖:

<dependencies>

<dependency>

<groupId>tigase</groupId>

<artifactId>tigase-server</artifactId>

<version>7.0.4</version>

</dependency>

<dependency>

<groupId>tigase</groupId>

<artifactId>tigase-message-archiving</artifactId>

<version>1.1.0</version>

</dependency>

<dependency>

<groupId>tigase</groupId>

<artifactId>tigase-muc</artifactId>

<version>2.3.0</version>

</dependency>

<dependency>

<groupId>tigase</groupId>

<artifactId>tigase-pubsub</artifactId>

<version>3.1.0</version>

</dependency>

<dependency>

<groupId>tigase</groupId>

<artifactId>tigase-xmltools</artifactId>

<version>3.4.5</version>

</dependency>

<dependency>

<groupId>tigase</groupId>

<artifactId>tigase-http-api</artifactId>

<version>1.1.1</version>

</dependency>

<dependency>

<groupId>tigase</groupId>

<artifactId>tigase-http-api-jetty</artifactId>

<version>1.0.0</version>

</dependency>

<dependency>

<groupId>tigase</groupId>

<artifactId>tigase-utils</artifactId>

<version>3.4.4</version>

</dependency>

</dependencies>

 

<repositories>

<repository>

<id>tigase</id>

<name>Tigase repository</name>

<url>http://maven.tigase.org</url>

</repository>

<repository>

<id>tigase-snapshot</id>

<name>Tigase repository</name>

<url>http://build.xmpp-test.net/maven/</url>

<snapshots>

<enabled>true</enabled>

</snapshots>

</repository>

</repositories>

 

然后我们就可以使用tigase相关的api,之后打成jar包放在tigase安装目录的jars目录下即可。

2.自定义的component如何发送packet:

通过tigase.server.AbstractMessageReceiver类的 boolean addOutPacket(Packet packet)方法即可

3.tigase好友关系在哪个表中维护?

在tig_pairs表

4.如何开启日志:

 

--debug=xmpp.impl.roster

开启tigase.xmpp.impl.roster包下面的类的日志

 

--debug-packages = com.tch.test.tigase.mytigase

开启我们自己的com.tch.test.tigase.mytigase包下面的类的日志

5.添加好友以及查看用户状态的时候,自动认证,无需对方同意,只需要添加下面的一个配置即可(参考:https://projects.tigase.org/issues/1696):

sess-man/plugins-conf/auto-authorize=true

6.如何在程序中添加用户:

调用存储过程 TigAddUserPlainPw,

java.sql.Connection.prepareStatement("{call TigAddUserPlainPw(?, ?)}");

第一个参数是user_id,第二个参数是密码

7.如何持久化聊天室(群聊,参考:https://projects.tigase.org/boards/8/topics/3456?r=5680):

--comp-name-2 = muc

--comp-class-2 = tigase.muc.MUCComponent

muc/default_room_config/muc#roomconfig_persistentroom=true

 

 

 

tigase init.properties一些配置的含义:

#支持群聊,并且默认就会保存群聊记录到muc_history表,但是默认是临时保存,当所有人离开之后,群就会不存在,群聊天记录也会删除,可以通过muc/default_room_config/muc#roomconfig_persistentroom=true来支持持久化(不配置这个component的话,不支持群聊)

--comp-name-2 = muc

--comp-class-2 = tigase.muc.MUCComponent

 

#支持消息存储(tig_ma_msgs表,不配置这个component的话,不会存储私聊消息)

--comp-name-3=message-archive

--comp-class-3=tigase.archive.MessageArchiveComponent

 

#消息存储的数据库配置,不配置这个参数的话,会使用--user-db-uri的数据库地址

message-archive/archive-repo-uri=jdbc:mysql://localhost:3306/messagearchivedb?user=root&password=root&useUnicode=true&characterEncoding=UTF-8

 

#指定消息存储的component

sess-man/plugins-conf/message-archive-xep-0136/component-jid=message-archive@192.168.43.146

#存储消息的方式(不配置这个参数的话,不会保存消息)

sess-man/plugins-conf/message-archive-xep-0136/required-store-method=message

 

#自动授权,配置这个参数之后,加好友的时候,不需要对方同意,自动添加成功

sess-man/plugins-conf/auto-authorize=true

#持久化群聊房间,不配置这个参数的话,所有人离开房间的时候,这个群就不存在了。

muc/default_room_config/muc#roomconfig_persistentroom=true

 

jaxmpp客户端:

添加仓库地址:

<repositories>

<repository>

<id>tigase</id>

<name>Tigase repository</name>

<url>http://maven.tigase.org</url>

</repository>

<repository>

<id>tigase-snapshot</id>

<name>Tigase repository</name>

<url>http://build.xmpp-test.net/maven/</url>

<snapshots>

<enabled>true</enabled>

</snapshots>

</repository>

</repositories>

 

添加依赖:

                 <dependency>

<groupId>tigase</groupId>

<artifactId>jaxmpp-core</artifactId>

<version>2.1.0</version>

</dependency>

<dependency>

<groupId>tigase</groupId>

<artifactId>jaxmpp-j2se</artifactId>

<version>2.1.0</version>

</dependency>

 

 

客户端代码:

 

import tigase.jaxmpp.core.client.BareJID;

import tigase.jaxmpp.core.client.JID;

import tigase.jaxmpp.core.client.SessionObject;

import tigase.jaxmpp.core.client.exceptions.JaxmppException;

import tigase.jaxmpp.core.client.observer.Listener;

import tigase.jaxmpp.core.client.xmpp.modules.presence.PresenceModule;

import tigase.jaxmpp.core.client.xmpp.modules.presence.PresenceModule.PresenceEvent;

import tigase.jaxmpp.core.client.xmpp.modules.roster.RosterItem;

import tigase.jaxmpp.core.client.xmpp.modules.roster.RosterStore;

import tigase.jaxmpp.core.client.xmpp.stanzas.Message;

import tigase.jaxmpp.core.client.xmpp.stanzas.Stanza;

import tigase.jaxmpp.core.client.xmpp.stanzas.StanzaType;

import tigase.jaxmpp.j2se.Jaxmpp;

 

public class JaxmppExample {

 

    public static void main( String[] args ) throws JaxmppException, InterruptedException {

 

        final Jaxmpp jaxmpp = new Jaxmpp();

        try {

jaxmpp.getModulesManager().getModule( PresenceModule.class ).addListener( PresenceModule.ContactChangedPresence, new Listener<PresenceModule.PresenceEvent>() {

   @Override

   public void handleEvent( PresenceEvent be ) throws JaxmppException {

       System.out.println( String.format( "Presence received:\t %1$s is now %2$s (%3$s)", be.getJid(), be.getShow(), be.getStatus() != null ? be.getStatus() : "none" ) );

   }

} );

jaxmpp.getSessionObject().setProperty(tigase.jaxmpp.j2se.connectors.socket.SocketConnector.HOSTNAME_VERIFIER_DISABLED_KEY, Boolean.TRUE);

jaxmpp.getProperties().setUserProperty( SessionObject.USER_BARE_JID, BareJID.bareJIDInstance( "richmj@192.168.43.146" ) );

jaxmpp.getProperties().setUserProperty( SessionObject.PASSWORD, "richmj" );

 

System.out.println("开始登陆。。。");

 

jaxmpp.login();

 

System.out.println("登陆成功。。。");

 

       RosterStore rosterStore = jaxmpp.getRoster();

       for(RosterItem rosterItem : rosterStore.getAll()){

       System.out.println("rosterItem:" + rosterItem);

       }

 

       jaxmpp.send(createMessage("admin,你好啊"));

//contact.sendMessage(JID.jidInstance("admin@192.168.43.146"), "Test", "This is a test");

 

} catch (Exception e) {

e.printStackTrace();

}finally {

if(jaxmpp != null){

jaxmpp.disconnect();

}

}

    }

    

    private static Stanza createMessage(String msg) {

try {

/*

<message id="pCp2F-58" to="richmj@192.168.43.146" from="admin@192.168.43.146/Spark" type="chat">

<body>1</body>

</message>

*/

Message message = Message.create();

message.setType(StanzaType.chat);

message.setAttribute("from", JID.jidInstance("richmj@192.168.43.146").toString());

message.setAttribute("to", JID.jidInstance("admin@192.168.43.146").toString());

message.setBody(msg);

System.out.println("message:" + message.getAsString());

return message;

} catch (JaxmppException e) {

e.printStackTrace();

}

return null;

}

    

}

 

 

 

 

 

 

 

 

 

 

这篇关于tigase 安装及基本开发的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/827479

相关文章

MySQL中between and的基本用法、范围查询示例详解

《MySQL中betweenand的基本用法、范围查询示例详解》BETWEENAND操作符在MySQL中用于选择在两个值之间的数据,包括边界值,它支持数值和日期类型,示例展示了如何使用BETWEEN... 目录一、between and语法二、使用示例2.1、betwphpeen and数值查询2.2、be

Python+wxPython开发一个文件属性比对工具

《Python+wxPython开发一个文件属性比对工具》在日常的文件管理工作中,我们经常会遇到同一个文件存在多个版本,或者需要验证备份文件与源文件是否一致,下面我们就来看看如何使用wxPython模... 目录引言项目背景与需求应用场景核心需求运行结果技术选型程序设计界面布局核心功能模块关键代码解析文件大

MySQL基本表查询操作汇总之单表查询+多表操作大全

《MySQL基本表查询操作汇总之单表查询+多表操作大全》本文全面介绍了MySQL单表查询与多表操作的关键技术,包括基本语法、高级查询、表别名使用、多表连接及子查询等,并提供了丰富的实例,感兴趣的朋友跟... 目录一、单表查询整合(一)通用模版展示(二)举例说明(三)注意事项(四)Mapper简单举例简单查询

C++多线程开发环境配置方法

《C++多线程开发环境配置方法》文章详细介绍了如何在Windows上安装MinGW-w64和VSCode,并配置环境变量和编译任务,使用VSCode创建一个C++多线程测试项目,并通过配置tasks.... 目录下载安装 MinGW-w64下载安装VS code创建测试项目配置编译任务创建 tasks.js

2025最新版Android Studio安装及组件配置教程(SDK、JDK、Gradle)

《2025最新版AndroidStudio安装及组件配置教程(SDK、JDK、Gradle)》:本文主要介绍2025最新版AndroidStudio安装及组件配置(SDK、JDK、Gradle... 目录原生 android 简介Android Studio必备组件一、Android Studio安装二、A

前端Visual Studio Code安装配置教程之下载、汉化、常用组件及基本操作

《前端VisualStudioCode安装配置教程之下载、汉化、常用组件及基本操作》VisualStudioCode是微软推出的一个强大的代码编辑器,功能强大,操作简单便捷,还有着良好的用户界面,... 目录一、Visual Studio Code下载二、汉化三、常用组件1、Auto Rename Tag2

win10安装及配置Gradle全过程

《win10安装及配置Gradle全过程》本文详细介绍了Gradle的下载、安装、环境变量配置以及如何修改本地仓库位置,通过这些步骤,用户可以成功安装并配置Gradle,以便进行项目构建... 目录一、Gradle下载1.1、Gradle下载地址1.2、Gradle下载步骤二、Gradle安装步骤2.1、安

一文详解Python如何开发游戏

《一文详解Python如何开发游戏》Python是一种非常流行的编程语言,也可以用来开发游戏模组,:本文主要介绍Python如何开发游戏的相关资料,文中通过代码介绍的非常详细,需要的朋友可以参考下... 目录一、python简介二、Python 开发 2D 游戏的优劣势优势缺点三、Python 开发 3D

Redis 基本数据类型和使用详解

《Redis基本数据类型和使用详解》String是Redis最基本的数据类型,一个键对应一个值,它的功能十分强大,可以存储字符串、整数、浮点数等多种数据格式,本文给大家介绍Redis基本数据类型和... 目录一、Redis 入门介绍二、Redis 的五大基本数据类型2.1 String 类型2.2 Hash

基于Python开发Windows自动更新控制工具

《基于Python开发Windows自动更新控制工具》在当今数字化时代,操作系统更新已成为计算机维护的重要组成部分,本文介绍一款基于Python和PyQt5的Windows自动更新控制工具,有需要的可... 目录设计原理与技术实现系统架构概述数学建模工具界面完整代码实现技术深度分析多层级控制理论服务层控制注