gloox+openfire+mysql安装配置

130 篇文章 1 订阅
85 篇文章 0 订阅


1、下载gloox代码编译

下载地址:http://camaya.net/gloox/

gloox编译需要注意修改config.h.win,具体根据项目需要确定,一下是我的config.h.win

/**
 * Uncomment whichever lib you have installed.
 */

/* Uncomment if you have zlib available and want to use it */
// #define HAVE_ZLIB 1

/* Comment out if you don't want to use Win's native TLS functions */
#define HAVE_WINTLS 1

/* Uncomment if you are compiling for Windows 7 or above, or Windows Server 2008 R2 and above, and
 * want to be able to use Channel Binding (with SASL SCRAM-SHA-1-PLUS). */
// #define HAVE_WINTLS_CHANNEL_BINDING 1

/* Uncomment if you have GnuTLS available and want to use it */
// #define HAVE_GNUTLS 1

/* Uncomment if you have GnuTLS 2.12.0 or above */
// #define HAVE_GNUTLS_SESSION_CHANNEL_BINDING 1

/* Uncomment if you have OpenSSL available and want to use it */
// #define HAVE_OPENSSL 1

/* Uncomment if you have LibIDN available and want to use it */
// #define HAVE_LIBIDN 1

/* Uncomment if you have the getaddrinfo function and want IPv6 support (XP and up) */
// #define HAVE_GETADDRINFO 1

/* Comment out if you don't have windns.h (e.g. if you use an old Platform SDK) */
#define HAVE_WINDNS_H 1

/* Comment out if you don't have the `setsockopt' function. Usually available. */
#define HAVE_SETSOCKOPT 1

#ifdef _MSC_VER

#ifndef _WIN32_WINNT
#define _WIN32_WINNT 0x0400
#endif//
#if _WIN32_WINNT<0x0400
#undef _WIN32_WINNT
#define _WIN32_WINNT 0x0400
#endif//
#define	WIN32_LEAN_AND_MEAN
   
#pragma comment( lib, "Dnsapi.lib" )
#pragma comment( lib, "Secur32.lib" )
#pragma comment( lib, "Crypt32.lib" )
#pragma comment( lib, "ws2_32.lib" )

/* The following silences a few C4355 warnings ('this' : used in member initializer list).
   This is only used with Parser which doesn't do anything with its TagHandler in the ctor,
   so muting C4355 is safe. */
#pragma warning( disable : 4355 )

/* The following silcences warnings concerning "unsafe" functions (sprintf, strncpy, etc.).
   They are used in a safe way here, though. */
#pragma warning( disable : 4996 )

#endif

编译过了,可以参考网上例子也可以参考gloox自带例子编写测试程序。


2、安装配置mysql

下载地址:http://www.mysql.com/downloads/

我下载的是mysql-5.6.24-win32.zip免安装版,所以需要解压,自己安装mysql服务

安装之前需要修改my-default.ini,我是复制这个到my.ini,然后修改my.ini的

# For advice on how to change settings please see
# http://dev.mysql.com/doc/refman/5.6/en/server-configuration-defaults.html
# *** DO NOT EDIT THIS FILE. It's a template which will be copied to the
# *** default location during install, and will be replaced if you
# *** upgrade to a newer version of MySQL.

[mysqld]

# Remove leading # and set to the amount of RAM for the most important data
# cache in MySQL. Start at 70% of total RAM for dedicated server, else 10%.
# innodb_buffer_pool_size = 128M

# Remove leading # to turn on a very important data integrity option: logging
# changes to the binary log between backups.
# log_bin

# These are commonly set, remove the # and set as required.
basedir = D:\other\mysql-5.6.24-win32
datadir = D:\other\mysql-5.6.24-win32\data
# port = 3306
# server_id = .....


# Remove leading # to set options mainly useful for reporting servers.
# The server defaults are faster for transactions and fast SELECTs.
# Adjust sizes as needed, experiment to find the optimal values.
# join_buffer_size = 128M
# sort_buffer_size = 2M
# read_rnd_buffer_size = 2M 


sql_mode=NO_ENGINE_SUBSTITUTION,STRICT_TRANS_TABLES
这里要注意, 千万不要使用网上其他人说的配置,使用并修改官方配置文件才是对的,因为不同版本mysql配置是不一样的。

最好还要在系统环境变量里配置MYSQL_HOME和PATH环境变量,我的是这样的


并将mysql下的bin添加到系统环境变量PATH中去

这样再控制台里可以不用跳转到mysql目录执行mysql命令了

安装mysql:mysqld -install

卸载mysql:mysqld -remove

启动mysql:net start mysql

停止mysql:net stop mysql

如果安装,运行mysql服务的时候出现1067这类错误,一定是配置文件问题,所以千万不要拷贝网上的其他人说的那些配置,然后再mysql目录下的data/admin-PC.err查看错误原因,这个会非常有帮助的。


3、安装配置openfire

下载地址:http://www.igniterealtime.org/projects/openfire/index.jsp

运行openfire目录下的bin/openfire.exe

这时候可能会提示很多错误,一般是因为你没有安装jre或者是jre是64位的,这个时候需要

1)、安装jre或者JDK,去oracle下载,下载地址:http://www.oracle.com/technetwork/java/javase/downloads/jre8-downloads-2133155.html

2)、将jre的bin目录添加到系统环境变量PATH中去

3)、如果你安装了64位jre或者jdk,你需要再下载32位jre,并增加EXE4J_JAVA_HOME系统环境变量,如:EXE4J_JAVA_HOME=C:\Program Files (x86)\Java\jre1.8.0_111

这样你基本上可以运行openfire了


因为前面已经安装并启动了mysql服务了

所以可以点击openfire的launch admin按钮安装openfire

在到数据库配置的地方,你需要使用mysql命令先创建好openfire数据库,并执行openfire目录下的resources\database\openfire_mysql.sql脚本命令初始化数据库表、数据项等。这样就可以在openfire的安装向导页面填写你的数据库了,本机的话,一般是localhost。


安装完之后就进入后台登录页面,默认管理员是admin,密码是admin


如果提示登录不上,就关掉opnfire,并重启openfire,进入后台管理页面,再登录

登录成功后,就进入后台管理页面了



4、联调测试:

编写了一个gloox测试程序:

/*
 *  Copyright (c) 2004-2016 by Jakob Schr枚ter <js@camaya.net>
 *  This file is part of the gloox library. http://camaya.net/gloox
 *
 *  This software is distributed under a license. The full license
 *  agreement can be found in the file LICENSE in this distribution.
 *  This software may not be copied, modified, sold or distributed
 *  other than expressed in the named license agreement.
 *
 *  This software is distributed without any warranty.
 */

#include "../client.h"
#include "../messagesessionhandler.h"
#include "../messageeventhandler.h"
#include "../messageeventfilter.h"
#include "../chatstatehandler.h"
#include "../chatstatefilter.h"
#include "../connectionlistener.h"
#include "../disco.h"
#include "../message.h"
#include "../gloox.h"
#include "../lastactivity.h"
#include "../loghandler.h"
#include "../logsink.h"
#include "../connectiontcpclient.h"
#include "../connectionsocks5proxy.h"
#include "../connectionhttpproxy.h"
#include "../messagehandler.h"
using namespace gloox;

#ifndef _WIN32
# include <unistd.h>
#endif

#include <stdio.h>
#include <string>

#include <cstdio> // [s]print[f]

#if defined( WIN32 ) || defined( _WIN32 )
# include <windows.h>
#endif

class MessageTest : public MessageSessionHandler, ConnectionListener, LogHandler,
                    MessageEventHandler, MessageHandler, ChatStateHandler
{
  public:
    MessageTest() : m_session( 0 ), m_messageEventFilter( 0 ), m_chatStateFilter( 0 ) {}

    virtual ~MessageTest() {}

    void start()
    {

      JID jid( "admin@localhost/gloox" );
      j = new Client( jid, "admin" );
      j->registerConnectionListener( this );
      j->registerMessageSessionHandler( this, 0 );
      j->disco()->setVersion( "messageTest", GLOOX_VERSION, "Linux" );
      j->disco()->setIdentity( "client", "bot" );
      j->disco()->addFeature( XMLNS_CHAT_STATES );
      StringList ca;
      ca.push_back( "/path/to/cacert.crt" );
      j->setCACerts( ca );

      j->logInstance().registerLogHandler( LogLevelDebug, LogAreaAll, this );

//
// this code connects to a jabber server through a SOCKS5 proxy
//
//       ConnectionSOCKS5Proxy* conn = new ConnectionSOCKS5Proxy( j,
//                                   new ConnectionTCP( j->logInstance(),
//                                                      "sockshost", 1080 ),
//                                   j->logInstance(), "example.net" );
//       conn->setProxyAuth( "socksuser", "sockspwd" );
//       j->setConnectionImpl( conn );

//
// this code connects to a jabber server through a HTTP proxy through a SOCKS5 proxy
//
//       ConnectionTCP* conn0 = new ConnectionTCP( j->logInstance(), "old", 1080 );
//       ConnectionSOCKS5Proxy* conn1 = new ConnectionSOCKS5Proxy( conn0, j->logInstance(), "old", 8080 );
//       conn1->setProxyAuth( "socksuser", "sockspwd" );
//       ConnectionHTTPProxy* conn2 = new ConnectionHTTPProxy( j, conn1, j->logInstance(), "jabber.cc" );
//       conn2->setProxyAuth( "httpuser", "httppwd" );
//       j->setConnectionImpl( conn2 );


      if( j->connect( false ) )
      {
        ConnectionError ce = ConnNoError;
        while( ce == ConnNoError )
        {
          ce = j->recv();
        }
        printf( "ce: %d\n", ce );
      }

      delete( j );
    }

    virtual void onConnect()
    {
      printf( "connected!!!\n" );
    }

    virtual void onDisconnect( ConnectionError e )
    {
      printf( "message_test: disconnected: %d\n", e );
      if( e == ConnAuthenticationFailed )
        printf( "auth failed. reason: %d\n", j->authError() );
    }

    virtual bool onTLSConnect( const CertInfo& info )
    {
      time_t from( info.date_from );
      time_t to( info.date_to );

      printf( "status: %d\nissuer: %s\npeer: %s\nprotocol: %s\nmac: %s\ncipher: %s\ncompression: %s\n"
              "from: %s\nto: %s\n",
              info.status, info.issuer.c_str(), info.server.c_str(),
              info.protocol.c_str(), info.mac.c_str(), info.cipher.c_str(),
              info.compression.c_str(), ctime( &from ), ctime( &to ) );
      return true;
    }

    virtual void handleMessage( const Message& msg, MessageSession * /*session*/ )
    {
      printf( "type: %d, subject: %s, message: %s, thread id: %s\n", msg.subtype(),
              msg.subject().c_str(), msg.body().c_str(), msg.thread().c_str() );

      std::string re = "You said:\n> " + msg.body() + "\nI like that statement.";
      std::string sub;
      if( !msg.subject().empty() )
        sub = "Re: " +  msg.subject();

      m_messageEventFilter->raiseMessageEvent( MessageEventDisplayed );
#if defined( WIN32 ) || defined( _WIN32 )
      Sleep( 1000 );
#else
      sleep( 1 );
#endif
      m_messageEventFilter->raiseMessageEvent( MessageEventComposing );
      m_chatStateFilter->setChatState( ChatStateComposing );
#if defined( WIN32 ) || defined( _WIN32 )
      Sleep( 2000 );
#else
      sleep( 2 );
#endif
      m_session->send( re, sub );

      if( msg.body() == "quit" )
        j->disconnect();
    }

    virtual void handleMessageEvent( const JID& from, MessageEventType event )
    {
      printf( "received event: %d from: %s\n", event, from.full().c_str() );
    }

    virtual void handleChatState( const JID& from, ChatStateType state )
    {
      printf( "received state: %d from: %s\n", state, from.full().c_str() );
    }

    virtual void handleMessageSession( MessageSession *session )
    {
      printf( "got new session\n");
      // this example can handle only one session. so we get rid of the old session
      j->disposeMessageSession( m_session );
      m_session = session;
      m_session->registerMessageHandler( this );
      m_messageEventFilter = new MessageEventFilter( m_session );
      m_messageEventFilter->registerMessageEventHandler( this );
      m_chatStateFilter = new ChatStateFilter( m_session );
      m_chatStateFilter->registerChatStateHandler( this );
    }

    virtual void handleLog( LogLevel level, LogArea area, const std::string& message )
    {
      printf("log: level: %d, area: %d, %s\n", level, area, message.c_str() );
    }

  private:
    Client *j;
    MessageSession *m_session;
    MessageEventFilter *m_messageEventFilter;
    ChatStateFilter *m_chatStateFilter;
};

int main( int /*argc*/, char** /*argv*/ )
{
  MessageTest *r = new MessageTest();
  r->start();
  delete( r );
  return 0;
}
成功如下:

spark登录成功,这里登录的域名填的是安装openfire时的域名




以上就是我配置gloox+openfire+mysql+jre的过程

谢谢


评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值