导读对于推送,IM服务器,目前可以使用一些厂家提供的SDK来实现,但是我们的老板又总是担心使用别人的SDK,假如别人的服务出现问题,或者别人偷看咱们的信息,那岂不是出现很大问题了


聊一聊xmpp的服务器openfire和测试客户端spark

1、什么是XMPP
这里说一下XMPP,我在前几节说的sdk汇总文章提到的部分推送,IM的SDK提供商用的是XMPP协议,当然也有是自己实现的协议的,例如腾讯。XMPP简单的来说,就是一个发送与接收之间定义的规则,不过这个协议和我们传统的协议有点不同,它不是二进制的方式的,也不是字符串的,而是一个XML格式的内容,相信大家都比较熟悉XML,xml的扩展性非常强大,XMPP也继承了它优良的传统,使得我们在通信中,可以更加容易定义自己的标志。
2、xmpp服务器openfire
    xmpp开源服务器有很多,我们这里介绍一下基于XMPP协议的服务器,Openfire。Openfire 是基于Jabber协议(XMPP)实现的即时通信服务器端版本,使用java来实现的,其官网是:http://www.igniterealtime.org/index.jsp
目前Openfire的版本是4.0.1,它可以部署在mac,windows和linux系统上。
这里我就以windows版本的服务器为例子,在官网下载好openfire后,直接点击安装,安装步骤按照我们平时安装软件那样就可以了,这里提示一点,如果安装成功后,openfire不会自动启动的话,那么 有可能是端口被占用了,xmpp一般使用的端口有5222、5223等,可以查看一下有没有被占用。

    如果安装后,没有自己启动的话,可以尝试手动点击start启动,一般安装好后需要我们对服务器进行配置,如果自己弹出了配置页面的话,可以跳过这一步,如果没有的话,可以点击 launch admin,如图

    进入配置页面后,会提示我们页面显示的语言,我们这里就选择简体中文,如图

    选择好语言后,我们需要对服务器进行设置,输入我们的域名\IP地址,如果需要加密 的话,这里需要配置加密的公钥和私钥等等,我这里选择默认的。如图

    配置好后,我们选择数据库的方式,这里说明一下,我们需要连接到一个已经安装好后的数据库的话,选择第一种方式,如果我们本地没有安装好,可以选择第二种,如图

    由于我这里是选择第一种方式,接着我们需要配置我们的ODBC连接方式,我这里的使用MYSQL的,输入数据库服务地址和数据库的名字,还有用户名和密码

    接着输入用户组里面的属性,我们这里选择默认的,如图

    输入管理员的账号和密码,这里一定要注意的,默认的管理员帐号和密码是admin和admin,如果需要修改成我们自己的密码的话,可以在这一步修改,但是一定要记住,不然的话,需要在数据库里面修改的,而且要以邮箱的形式来修改帐号。如图

    进行到这一步,服务器的配置算是完成了

    我们可以在管理平台上看到我们openfire的配置信息了,如图

    对于mac版本的安装,下载后点击安装,安装完成后,可能会不知道安装在哪里,我们可以打开偏好设置,要重新打开才有效的,然后打开openfire的按钮,如下图,

    这个时候,我们直接点击start openfire就可以打开我们mac版本的服务器,此外再次提示一下的就是,如果打不开openfire要检查里面的端口有没有被占用了。

3、测试客户端Spark
    这里我们直接用官网上的Spark来测试我们的实时信息,在官网下载好spark,点击安装,安装好后,我们需要注册一个帐号,注册帐号的步骤,如下图,这里需要注意的是服务器地址,这里的地址就是我们刚才输入的域名地址,我们可以输入服务器的IP地址,如果是本地测试的可以输入127.0.0.1或者所有域,或者域名,这个根据具体情况输入。
spark的下载地址http://www.igniterealtime.org/downloads/index.jsp#spark

    注册成功后,会自动弹回登录的页面的,我们输入帐号和密码就可以登录到相应的界面,并且会显示类似飞信的页面的,显示自己在线的,如图

4、测试群发信息
    这时我们登录后管理平台上,想利用后台群发一条信息到客户端,我们点击会话->工具->发送信息,然后输入我们的内容,例如hello.点击发送后客户端会收到hello,这时说明实时内容已经到达了。


免费提供最新Linux技术教程书籍,为开源技术爱好者努力做得更多更好:https://www.linuxprobe.com/

XMPP协议、IM、客户端互联详解的更多相关文章

  1. 第8章 应用协议 图解TCP/IP 详解

    第8章 应用协议 图解TCP/IP 详解 8.1 应用层协议概要 应用层协议的定义 TCP和IP等下层协议是不依赖上层应用类型.实用性非常广的协议.而应用协议则是为了实现某种应用而设计和创造的协议. ...

  2. HTTP协议 (六) 状态码详解

    HTTP协议 (六) 状态码详解 HTTP状态码,我都是现查现用. 我以前记得几个常用的状态码,比如200,302,304,404, 503. 一般来说我也只需要了解这些常用的状态码就可以了.  如果 ...

  3. WebSocket安卓客户端实现详解(三)–服务端主动通知

    WebSocket安卓客户端实现详解(三)–服务端主动通知 本篇依旧是接着上一篇继续扩展,还没看过之前博客的小伙伴,这里附上前几篇地址 WebSocket安卓客户端实现详解(一)–连接建立与重连 We ...

  4. WebSocket安卓客户端实现详解(一)–连接建立与重连

    http://blog.csdn.net/zly921112/article/details/72973054 前言 这里特别说明下因为WebSocket服务端是公司线上项目所以这里url和具体协议我 ...

  5. SSL协议之数据加密过程详解

    前言 总括: 原文博客地址:SSL协议之数据加密过程详解 知乎专栏&&简书专题:前端进击者(知乎)&&前端进击者(简书) 博主博客地址:Damonare的个人博客 生活 ...

  6. SVN的Windows和Linux客户端操作详解

    SVN的Windows和Linux客户端操作详解 作者:尹正杰 版权声明:原创作品,谢绝转载!否则将追究法律责任. 一.Windows客户端操作 1.安装SVN客户端 a>.去官网下载svn软件 ...

  7. TCP协议粘包问题详解

    TCP协议粘包问题详解 前言 在本章节中,我们将探讨TCP协议基于流式传输的最大一个问题,即粘包问题.本章主要介绍TCP粘包的原理与其三种解决粘包的方案.并且还会介绍为什么UDP协议不会产生粘包. 基 ...

  8. 安全超文本传输协议(HTTPS)详解

    一.概念与摘要 HTTPS (Secure Hypertext Transfer Protocol)安全超文本传输协议,是一个安全通信通道,它基于HTTP开发用于在客户计算机和服务器之间交换信息.它使 ...

  9. HTTP协议缓存策略深入详解之ETAG妙用

    Etag是什么: Etag 是URL的Entity Tag,用于标示URL对象是否改变,区分不同语言和Session等等.具体内部含义是使服务器控制的,就像Cookie那样. HTTP协议规格说明定义 ...

随机推荐

  1. 【Hadoop代码笔记】Hadoop作业提交之Job初始化

    一.概要描述 在上一篇博文中主要描述了JobTracker和其几个服务(或功能)模块的接收到提交的job后的一些处理.其中很重要的一部分就作业的初始化.因为代码片段图的表达问题,本应该在上篇描述的内容 ...

  2. NServiceBus教程-消息传递与处理

    nservicebus"的容错默认"设计的一部分,基础设施管理事务自动所以你不需要记住所有的线程和状态管理要素配置. 客户端和服务器 理想情况下,服务器代码处理消息事务,但它往往不 ...

  3. Chapter 3 Start Caffe with MNIST Demo

    先从一个具体的例子来开始Caffe,以MNIST手写数据为例. 1.下载数据 下载mnist到caffe-master\data\mnist文件夹. THE MNIST DATABASE:Yann L ...

  4. 《学习OpenCV》练习题第四章第二题

    #include <highgui.h> #include <cv.h> #pragma comment (lib,"opencv_calib3d231d.lib&q ...

  5. 关于javascript里面仿python切片操作数组的使用方法

    其实在使用了好一段时间的 python之后,我觉得最让我念念不忘的并不是python每次在写函数或者循环的时候可以少用{}括号这样的东西(ps:其实也是了..感觉很清爽,而且又开始写js的时候老是想用 ...

  6. 转】MySQL客户端输出窗口显示中文乱码问题解决办法

    原博文出自于: http://www.cnblogs.com/xdp-gacl/p/4008095.html 感谢! 最近发现,在MySQL的dos客户端输出窗口中查询表中的数据时,表中的中文数据都显 ...

  7. string 与char* char[]之间的转换 2015-04-09 11:30 29人阅读 评论(0) 收藏

    1.首先必须了解,string可以被看成是以字符为元素的一种容器.字符构成序列(字符串).有时候在字符序列中进行遍历,标准的string类提供了STL容器接口.具有一些成员函数比如begin().en ...

  8. Gradle 1.3之前的Publishing artifacts

    在Gradle1.3之前,Publishing artifacts是使用uploadConfigurationName来publish 声明artifacts是靠使用 build.gradle art ...

  9. USB设备不能用。提示Windows 无法启动这个硬件设备。 (代码 19)

    USB,由于其配置信息(注册表中的)不完整或已损坏, Windows 无法启动这个硬件设备. (代码 19) 原因:提示Windows 无法启动这个硬件设备. (代码 19) 处理解决方法: 1) r ...

  10. 计算直线的交点数(hdu1466简单的dp)

    题意:平面上有n条直线,且无三线共点,问这些直线能有多少种不同交点数.比如,如果n=2,则可能的交点数量为0(平行)或者1(不平行). 思路:动态规划,想办法记忆化搜索,当前状态和之前状态结合起来 d ...