[Openfire]使用WebSocket建立Openfire的客户端

摘要:
找了半天,知道比较流行的是Openfire的系统,Openfire有许多平台实现,由于我是做Web的,所以当然是希望寻找Web的实现。肯定是去Openfire的官网下载最新的Openfire服务端程序啦,Openfire的是开源的,可以免费下载。这个火花是Openfire搭配的客户端,也是多平台支持的。安装WebSocket插件这就不说了。

近日工作闲暇之余,对IM系统产生了兴趣,转而研究了IM的内容。找了半天,知道比较流行的是Openfire的系统,Openfire有许多平台实现,由于我是做Web的,所以当然是希望寻找Web的实现。Openfire的以前的Web实现,是基于Http-bind的一种长轮询机制,当然也没什么不好,只是我现在HTML5都开始了,当然希望能够来个基于Websocket的机制了。然而Google&百度了好久,也没有找到什么教程,发现这个东西并不是很火热的样子,那只好自己开始研究了。于是有了这一篇文章。

对了,我知道xmpp的JS框架有几个,但那些框架似乎都是按照原本的长轮询的机制来做的,并不是使用Websocket来做的。

另外,做软件2年了,当我刚涉足这个行业时,我被告知:“不要重复造轮子!”,曾经我对此深信不疑,但这两年的工作让我越发认识,不要重复造轮子,仅仅是在于做项目当中,做一个商业产品的时候,考虑到开发速度和产品后期的稳定性及维护性,确实需要采用成熟的技术,但!这不代表作为一个程序员,不应该抱着一种从0开始的研究精神,如果真的热爱这个行业,这个领域,就应该尝试着,根据RCF文档协议,从基础协议的层次开始做软件。

好了,废话不多说。恩,开始正文吧。

So 得先搞一个服务端是吧?

肯定是去 Openfire 的官网下载最新的Openfire服务端程序啦,Openfire的是开源的,可以免费下载。如图:

[Openfire]使用WebSocket建立Openfire的客户端第1张

  1. Openfire 的主程序,主程序是服务端程序,这个主程序不是一个框架,不是一个半成品,而是一个很完整的项目,怎么个很完整?就是你下载下来,直接双击运行(Windows),或到其程序的根目录下bin文件夹,然后执行 openfire start 命令(Linux),Mac就更简单了,直接在“设置”当中会有一个专门的管理窗口。然后它有一个Web版的管理后台,所有设置都可以在这个后台完成,包括安装插件之类的。
  2. 这个火花(Spark)是Openfire搭配的客户端,也是多平台支持的。
  3. 这个地方可以下载Openfire的源代码,你可以把他放到你的IDE中,然后简单配置一下,就可以run起来,这个教程网上很多,我就不多废话了。
安装WebSocket插件

[Openfire]使用WebSocket建立Openfire的客户端第2张

这就不说了。

建立Websocket连接

安装了WebSocket插件之后,有两个原本用于http-bind的端口,就被WebSocket占用了(有了WebSocket,还需要Http-bind做啥= =)。这两个接口分别是7443和7070,前者是用于HTTPS安全连接,后者是非安全连接。

建立链接:

1   var connectionState = ["正在连接..", "连接已建立", "正在关闭..", "已经关闭"];
2     var host = "ws://127.0.0.1:7070/ws/";
3     if (window.WebSocket != 'undefined') {
4         //OpenFire是实现了WebSocket的子协议
5         var connection = new WebSocket(host, "xmpp");
6 console.log(connectionState[connection.readyState]);
7         //注册连接建立时的方法
8         connection.onopen =wsOpen;
9         //注册连接关闭时的方法
10         connection.onclose =wsClose;
11         //注册收到消息时的方法
12         connection.onmessage =wsMsg;
13     }

如果要使用Https加密信道,就把Host改成:

var host="wss://127.0.0.1:7443/ws/

恩,建立安全连接还需要添加安全证书到Keystore,这个在Openfire的根目录下,有一个resource/security文件夹,里面有keyStore文件,当然,这部分我还不是很懂,关于Https的加密信道,TSL/SSl证书的概念,还没完全弄明白,不过这也不是这篇文章的重点。暂时我就先用非加密的方式来做,至于加密的连接,除了host的区别,其他也没有区别。

当Websocket握手之后,我们要做的第一件事,就是发起一个建立流的请求,

1 functionwsOpen(event) {
2         //打印链接状态
3 console.log(connectionState[connection.readyState]);
4         //发送建立流请求
5         var steam = "<open to='127.0.0.1' from='wuxinzhe@127.0.0.1'  xmlns='urn:ietf:params:xml:ns:xmpp-framing' xml:lang='zh' version='1.0'/>";
6 connection.send(steam);
7     }

Websocket下,建立流不像其他平台那样,使用<stream:stream/>标签,而是使用<open/>标签,其中to属性是域名,from是你的JID。

发出请求之后,会立刻收到服务器的响应:

[Openfire]使用WebSocket建立Openfire的客户端第3张

第一条响应式服务器同意建立流,第二条是告诉你,安全验证的几种方式,其中最简单的方式是PLAIN方式,这种方式仅仅是将你的账号密码进行BASE64加密后传输,可以说是很不安全。当然,你也可以选择SCRAM-SHA-1的安全加密方式,只不过你的js库要支持SHA-1加密,我因为是刚开始探路,所以一切从简,SHA-1的加密方式请求流程跟PLAIN会有一点区别,回头咱们再说。

另外我这边写了一个当收到来自服务端信息的方法:

  functionwsMsg(event) {
        console.log("Server: " +event.data);
    }

打印出来而已。就像上面console面板中的信息一样。那个是chrome的调试器,其他浏览器也有对应的。

发起登录验证

刚才说了,我先用最基本的PLAIN的方式登录:

   functionauth() {
        //Base64编码
        var token = window.btoa("wuxinzhe@127.0.0.1

免责声明:内容来源于网络,仅用于学习参考。如对内容有疑问,请及时联系本站处理。

上篇自建 Gitlab (邮箱配置、拆分 PostgreSQL、Redis) + 随想[转]HorizontalScrollView介绍--支持水平滚动的android布局容器下篇

宿迁高防,2C2G15M,22元/月;香港BGP,2C5G5M,25元/月 雨云优惠码:MjYwNzM=

相关文章

Swoole跟thinkphp5结合开发WebSocket在线聊天通讯系统教程

https://cloud.tencent.com/developer/article/1408530 ThinkPHP使用Swoole需要安装 think-swoole Composer包,前提系统已经安装好了Swoole PECL 拓展 tp5的项目根目录下执行composer命令安装think-swoole: composer require top...

反爬虫

一、前置知识 1. 动态网页和网页源码 在爬虫领域中,静态网页与动态网页的定义与传统定义是完全不同的。 静态网页指的是网页主体内容的渲染工作在服务器端完成,并通过响应正文返回的网页。 动态网页指的是主体内容或者全部内容都需要客户端执行 JavaScript 代码来计算或渲染的网页。 网页源码,是指未经过浏览器解释和 JavaScript 引擎渲染的文本...

python2.7实现websocket服务器,可以在web实时显示远程服务器日志

一、开始的话   使用python实现websocket服务器,可以在浏览器上实时显示远程服务器的日志。   之前写了一个发布系统,每次发布版本后,为了了解发布情况(进度、是否有错误)都会登录到服务器上查看日志,有点麻烦,如果发布的服务器比较多,难道要登录到每台服务器去看日志吗?作为新时代的运维,太不能接收这种重复操作的体力劳动了,于是一个看日志的功能就这...

F5 关于websocket

版本问题:  https://support.f5.com/csp/article/K14754  12.1.0 以后能够处理 websocket 协议,之前的版本可以使用两个vs 来区分, http 协议一个  ws 协议 一个  .。如果需要  ssl 协议 那么就配置一个 wss 的vs 。   11.4.0   版本到 12.1.0 版本可以 配置...

WebSocket详解

WebSocket 出现前 构建网络应用的过程中,我们经常需要与服务器进行持续的通讯以保持双方信息的同步。通常这种持久通讯在不刷新页面的情况下进行,消耗一定的内存资源常驻后台,并且对于用户不可见。在 WebSocket 出现之前,我们有以下解决方案: 传统轮询(Traditional Polling) 当前Web应用中较常见的一种持续通信方式,通常采取 s...

websocket前后端交互

一.目录 websocket的简介 websocket客户端 websocket服务端 测试运行WebSocketWebSocket是HTML开始提供的一种浏览器与服务器间进行全双工通讯网络技术,依靠这种技术和服务器端的长连接,双向实时通讯.特点:事件驱动,异步,使用ws或者wss协议的客户端socket,能够实现真正意义上的推送功能缺点:少部分浏览器不...