搭建开源IM系统_kl222的博客-程序员宅基地

技术标签: jdk  Linux编程  Linux  网络  IM  im  ubuntu  mysql  数据库  

用mysql+openfire+spark搭建开源IM系统

mysql是数据库,用于存储信息。

openfire是XMPP协议服务器,实现了XMPP协议。

spark是客户端。编译方法详见:http://blog.csdn.net/kl222/article/details/7080471

 

环境:

root@ubuntu:~# uname -a
Linux ubuntu 3.0.0-12-generic #20-Ubuntu SMP Fri Oct 7 14:50:42 UTC 2011 i686 i686 i386 GNU/Linux

jdk7

openfire3.7.1

mysql:Server version: 5.1.58-1ubuntu1 (Ubuntu)

 

 

服务器搭建:

下载openfire源码,解压后的目录结构:

 

 

帮助文档在:documentation\docs\index.html

 

1、安装 openfire

1.1、安装数据库(以mysql为例)

ubuntu默认没有安装mysql.你只要 apt-get install mysql.就可以下载和安装了。你可以下载mysql源码进行编译安装。

安装后常见的问题:

A、防火墙打开,解决方法是关闭防火墙,或者打开相应的端口(见后面端口列表)

B、给用户设置密码

修改mysql密码的方法

use mysql
update user set Password=password('newpassword') where User='root';
flush privileges;

1.通过修改MYSQL数据库中MYSQL库的USER表
       就用普通的UPDATE、INSERT语句就可以

2.在命令行中使用如下命令
       MYSQLADMIN -u root -p PASSWORD mypasswd

3.可以修改MYSQL文件夹中的MY.INI文件

4.使用SET PASSWORD语句,
mysql> SET PASSWORD FOR myuser@localhost = PASSWORD('mypasswd');

5.使用GRANT ... IDENTIFIED BY语句
mysql>GRANT USAGE ON *.* TO root@"%" IDENTIFIED BY"root";  

 

GRANT ALL privileges ON *.* TO root@"%" IDENTIFIED BY "root";

C、其它机器不能访问mysql,解决方法,新增加用户,让此用户能从其它机器访问。

其一:

mysql>GRANT ALL PRIVILEGES ON root.* TO root@"%" IDENTIFIED BY "password";

允许root用户可以从任意机器上登入MySQL。

其二:

$sudo gedit /etc/mysql/my.cnf

老的版本中

>skip-networking => # skip-networking

新的版本中

>bind-address=127.0.0.1 => bind-address= 你机器的IP 或者去掉此行。

这样就可以允许其他机器访问MySQL了。

 

1.1.1、建立库表:

#mysqladmin create [databaseName]

databaseName:是数据库名。

例如:如果数据库有账户root,密码为password,则:

#mysqladmin -u root -ppassword create openfire

 

1.1.2、导入库表,数据库脚本位于安装目录 src/database 。
Unix/Linux: cat openfire_mysql.sql | mysql [databaseName];
Windows: type openfire_mysql.sql | mysql [databaseName];

例如:

cat openfire_mysql.sql | mysql -h HOST_IP -P PORT  -u root -ppassword openfire; 

注意:-p与密码中间没有空格

1.2、编译openfire(linux下)

1.2.1、安装并设置 jdk,本人用的是 jdk7

export $JAVA_HOME=/usr/lib/jvm/java-7-openjdk-i386
1.2.2、安装并设置 ant 
1.2.3、开始编译openfire

进入源码目录下的/build

#ant

搞定编译完成。openfire核心编译完成。

程序会产生在源码目录下的 target 目录下

如果要插件的话(比如IM网关),则要编译插件:

#ant plugins

编译完成,所有插件被放到源码目录下的target/openfire/plugins

 windows下用eclipse编译,可参照 eclipse编译spark 的方法进行。 http://blog.csdn.net/kl222/article/details/7080471

1.2.4、可能出现的问题。

由于我用的是jdk7的版本,openfire3.7是只支持jdk5和jdk6,所以在编译时会提示jdk错误。你只要在build.xml文件中增加下面红色部分就可以解决。

<condition property="java.not.ok" value="true">
            <not>
                <or>
                    <contains string="${ant.java.version}" substring="1.5"/>
                    <contains string="${ant.java.version}" substring="1.6"/>
                    <contains string="${ant.java.version}" substring="1.7"/>
                </or>
            </not>
        </condition>

1.2.5、配置

配置文件位于源码目录下的 target/conf 目录下。

主要配置文件:openfire.xml

 配置管理控制台:

  <adminConsole>
    <!-- Disable either port by setting the value to -1 -->
    <port>9090</port>
    <securePort>9091</securePort>
  </adminConsole>

配置数据库。这一步也可以编译完openfire后,运行openfire,然后再从管理控制台进行配置。

  <connectionProvider>
    <className>org.jivesoftware.database.DefaultConnectionProvider</className>
  </connectionProvider>
  <database>
    <defaultProvider>
      <driver>com.mysql.jdbc.Driver</driver>
      <serverURL>jdbc:mysql://localhost:3306/openfire</serverURL>
      <username>root</username>
      <password>root</password>
      <testSQL>select 1</testSQL>
      <testBeforeUse>true</testBeforeUse>
      <testAfterUse>true</testAfterUse>
      <minConnections>5</minConnections>
      <maxConnections>25</maxConnections>
      <connectionTimeout>1.0</connectionTimeout>
    </defaultProvider>
  </database>

 

1.3、运行

1.3.1、未安装运行

在源码目录下的/build 下运行

#ant run

就可以运行openfire了

root@ubuntu:~/openfire_src/build# ant run
Buildfile: /root/openfire_src/build/build.xml

run:
     [java] Listening for transport dt_socket at address: 8000
     [java] Openfire 3.7.1 [2011-12-13 2:47:08]
     [java] 管理平台开始监听:
     [java]   http://127.0.0.1:9090
     [java]   https://127.0.0.1:9091

 

1.3.2、安装后运行

# /etc/init.d/openfire
Usage /etc/init.d/openfire {start|stop|restart|status|condrestart|reload}
# /etc/init.d/openfire start
Starting openfire:

 

1.3.3、用eclipse运行

详见:http://blog.csdn.net/kl222/article/details/22404079 

1.4、配置

访问openfire服务器地址:  http://192.168.0.128:9090 ,初始账户:admin,密码admin;就可以配置 openfire

 

如果是第一次启动,则会出现下面配置界面:http://127.0.0.1:9090/setup/index.jsp

 

 

 

网关配置:

现在可以支持msn、gtalk、icq等,qq、人人网等属于试验型的。但我测试没有通过。

选中你要的网关类型,点测试,看是否能成功,如果成功,则表示可以通信。我测试msn可以测试通过,但是客户端不能在msn注册。测试gtalk可以成功,也可以登录。好象gtalk服务器也是基于xmpp的,端口也是用的5222

 

 建立一个账户 a

 

2、安装spark

windows7旗舰版

jdk7

spark2.6.3

 

2.1、spark下载

spark安装包有两种,一个带jdk的,一个不带jdk的,下载带jdk的,双击安装即可

登录后在工具栏上会出现gtalk的图标

把a账户与gtalk账户进行绑定

输入gtalk账户

gtalk账户登录成功

好了,现在可以自由的与gtalk通信了。

版权声明:本文为博主原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。
本文链接:https://blog.csdn.net/kl222/article/details/7043130

智能推荐

linux进程调度Ⅳ----组调度及带宽控制_linux throttledperiods-程序员宅基地

目录1概述2task_group2.1 调度关系2.2 权重(shares)3cfs_bandwidth3.1 数据结构3.2 流程分析3.2.1 初始化流程3.2.2 用户设置流程3.2.3throttle限流操作3.2.4 总结1概述组调度(task_group)是使用Linuxcgroup(control group)的cpu子系统来实现的,可以将进程进行分组,按组来分配CPU资源等。比如,看一个实际的例子:A和B两个用户使用同一..._linux throttledperiods

离线安装Miktex/CTEX的宏包Package_miktex离线安装package-程序员宅基地

离线安装Miktex/CTEX的宏包Package_miktex离线安装package

FPGA设计编程(三) 时序逻辑电路-计数器设计_计数器原理fpqa-程序员宅基地

目录 【实验要求】 【实验软件工具】【实验一】设计一个8位异步二进制计数器模块1. 实验内容与原理说明2. 实验模块程序代码和激励代码(1)设计模块代码(2)激励模块代码3. 波形仿真图4.门级电路图【实验二】设计一个8位同步二进制计数器模块1. 实验内容与原理说明2. 实验模块程序代码和激励代码(1)设计模块代码(2)激励模块代码3. 波形仿真图4.门级电路图【实验三】设计一个8位十进制计数器(异步/同步)模块1. 实验内容与原理说明2. 实验模块程序代码和激励代码(1)设计模块代码(2)激励模块代码3._计数器原理fpqa

负责提供并管理共享资源的计算机称为,局域网中,提供并管理共享资源的计算机称为______..._企鹅吃喝指南的博客-程序员宅基地

摘要:局域浊度原水取值设计。下边向洞或底面低沿至于8楼板m的等竖窗台口,供并管理共享如侧于2边落差大m时,_高应加栏的临设_时护。资源...局域浊度原水取值设计。人死继承亡的,网中额(继承其应的份。下边向洞或底面低沿至于8楼板m的等竖窗台口,供并管理共享如侧于2边落差大m时,_高应加栏的临设_时护。后工程模版安装,进行应由验收按照方案施工。细胞行再容器增殖中进培养几个养的以1以上移到外培例转当体到..._48 [单选题]局域网中,提供并管理共享资源的计算机称为() 。(2分)服务器网桥c)网关d)工作站

Go Web实战连载二 Golang程序结构_golang项目目录结构-程序员宅基地

命名Go语言中的函数名、变量名、常量名、类型名、语句标号和包名等所有的命名,都遵循一个简单的命名规则:一个名字必须以一个字母(Unicode字母)或下划线开头,后面可以跟任意数量的字母、数字或下划线。大写字母和小写字母是不同的:heapSort和Heapsort是两个不同的名字。Go语言中类似if和switch的关键字有25个;关键字不能用于自定义名字,只能在特定语法结构中使用。break default func interface selectcase _golang项目目录结构

随便推点

UNIX下vi编辑超大文本文件-程序员宅基地

如何用vi编辑超大文本文件 vi缺省能编辑的最大文件不能超过1048560行,如果需要编辑更大的文件,用-y参数可以指定行数,如vi -y 2000000.

Toast工具类,App退出时Toast同时销毁-程序员宅基地

public class ToastUtils { private static Toast mToast; public static void showToastShort(Context context, String msg) { if (mToast == null) { if (msg != null &amp;&amp; m...

MQTT详解及百度物接入连接手机测试(含源码)_mqtt密钥源码-程序员宅基地

MQTT简介MQTT定义 MQTT(Message Queuing Telemetry Transport,消息队列遥测传输)是IBM开发的一个即时通讯协议,有可能成为物联网的重要组成部分。该协议支持所有平台,几乎可以把所有联网物品和外部连接起来,被用来当做传感器和制动器(比如通过Twitter让房屋联网)的通信协议。MQTT特点MQTT协议是为大量计算能力有限,且工作在低带..._mqtt密钥源码

python django基础<1>-程序员宅基地

python Web程序众所周知,对于所有的Web应用,本质上其实就是一个socket服务端,用户的浏览器其实就是一个socket客户端。#!/usr/bin/env python#coding:utf-8 import socket def handle_request(client): buf = client.recv(1024) client.send(...

牛客网专项练习——Java 专项练习(11 ~ 20)-程序员宅基地

11、以下哪些方法是Object类中的方法A. clone()B. toString()C. wait()D. finalize()答案: ABCD解析:Object 类中方法及说明如下:registerNatives() //私有方法getClass() //返回此 Object 的运行类。hashCode() //用于获取对象的哈希值。equals(Ob...

IO、BIO、NIO、AIO_io bio nio aio_炎升的博客-程序员宅基地

关注的是。:被调用方做完内部所有事情后再返回,同步调用的调用者一定会得到被调用方的结果。:被调用方先返回,再做事情,做完所有事情后再通知调用方(回调方法),异步调用方不会立即得到被调用方的结果,而是当被调用方执行完成后通过回调函数处理该结果。_io bio nio aio