打开即时通讯服务器openfire的大门
1、什么是即时通讯
你现在最常用的软件是什么,如果我没有猜错,应该是QQ和微信,是的,他们就是即时通讯软件。
一个可以让你无时无刻,只要有网络就能够沟通的工具,就是即时通讯工具。那么本教程,我们主要以openfire为基础来讲解即时通讯服务器和客户端的实现。
毫无疑问,为了更深入的理解openfire,我们也会深入openfire源码,尽可能多的了解它的美丽细节。
2 即时通讯的核心概念
那么要实现类似QQ这样一个即时通讯系统,主要会涉及哪些方面呢?Jack老师来详细为你白话一下。
(1)、需要有服务器
首先,需要有服务器程序,服务器程序负责用户的登录、消息之间的转发、离线消息的存储等。
例如,柳岩发了一条消息给黄晓明(哇塞,好像他们没有半毛钱关系哈)。柳岩那条消息会通过服务器,告知黄晓明。根据不同的业务逻辑,黄晓明可以在不同时间收到该条消息,例如黄晓明和baby在一起,现在没有在线,那么这条消息会存入离线。如果黄晓明在线,那么服务器会立刻将消息发送给黄晓明。
话说,黄晓明的婚礼也太他妈贵了,Jack老师想有一天也有那么多钱,你想吗?想就,好好学习。
(2)、需要有客户端
这个很简单,没有类似QQ、微信这样的客户端,怎么发送消息给服务器呢。所以,即时通讯也需要有客户端。本教程,我们也会使用strophe库,给讲解客户端的实现,其他库实现客户端的原理一样。
(3)、客户端和服务器之间需要一种通讯协议。
服务器和客户端需要共同制定一种规则,例如“to:xiaoming”,表示发送消息给xiaoming,这种规则就叫做通讯协议。
QQ、微信都有自己的通讯协议,一个协议的制定要考虑很多因素,所以自己制定一种协议,会花费很多的时间,我们本套课程,使用的是已经有10几年历史的xmpp协议,xmpp协议是一种规范的协议,你可以在这里看到整个协议的文档http://xmpp.org/。
3、沟通离不开协议 XMPP协议介绍
我们可以在官网(xmpp.org)看到xmpp协议,这个是xmpp基金会的网站,您可以从这里看到xmpp协议和xmpp的扩展。
总之,目前为止,您只需要知道xmpp是一种即使通讯协议就可以了,支持文本、视频、文件等的传输。
同时,这种协议很成熟,很多大公司都在使用,例如google。
4、xmpp协议例子
Xmpp协议是建立在xml的基础上的,所以,看起来,xmpp协议就像一个xml。
例如下面的xmpp协议,它其实就是一个xml文本。
<message from="11@myopenfire.com" to="22@myopenfire.com"> |
xxx</message> |
5、通讯服务器应该有的功能。
即时通讯服务器应该有很多功能,我们这里总结如下:
1、私聊功能:就是用户之间进行私聊的功能。
2、组聊天功能:在一个组的用户能够进行彼此的功能,并且高效的聊天。
3、文件传输:现在的聊天工具都有文件传输功能吧。文件传输其实有离线传输,还有在线传输,用过qq的同学,自然知道他们是什么意思。
4、语音视频聊天:这个功能开发较为复杂,但是手机和电脑上的使用率都很高,所以服务器应该支持。
5、用户的在线与离线状态:服务器应该有维护用户在线与理想的状态。
6、注册功能:最好服务器应该有注册的功能。虽然QQ都是在网页端注册的,走的是http协议,但是一个即时通讯服务器有注册功能,可以是一个加分项目。不知道你理解这句话的意思没?老师耐心的给你讲一下,就是注册都是用xmpp协议来完成。
7、可以支持表情、图片传输:这个应该是标配吧。
8、服务器应该支持心跳包:心跳包可以保证在网络不好的情况下,客户端与服务器保持一个比较稳定的连接。
6、常用的XMPP服务器比较(横测)
下面是一些常用的xmpp服务器,每个服务器都有优点,但是我们强烈建议你使用openfire,在我们的实践中,openfire经过集群和优化,能够支撑上亿的客户端连接,如果舍得花钱买更多的服务器,那么可以扩充到更多。对于目前的情况来说,任何一个大中小型企业选择openfire,都是足够的了,因为短时间内,绝对不可能超过上亿的连接,几十、上百万就不错了。
下图是各个xmpp协议服务器的比较:
名字 | 平台 | 开源协议 | Jack老师备注 |
openfire | linux、windows、mac | Apache,很开放的一种协议 | openfire性能较高,单台能够达到30w以上的并发量。集群后,可以无限扩展。代码结构设计很合理,插件式开发,扩展能力强。这也是《openfire教程网》讲解的服务器,这个服务器明白了,那么其他服务器的原理大同小异。 |
ejabberrd | linux、windows、mac | GPL2协议 | 它有普通版和商业版,区别是商业版性能更高。但是要使用Erlang语言开发。访问本站的大多数同学应该都没有Erlang经验,如果选择学习这个服务器,对大家理解原理没有帮助。 |
jabberd 2.x | linux、windows | GPL2协议 | 使用C开发,效率高,但是目前没有openfire、ejarbberrd维护好。且C语言开发难度大。 |
Tigase | linux、mac、windows | AGPL协议 | 天生为集群设计,并发性非常高,每秒可以处理50w条消息,简单的集群就可以上千万人在线,但是学习难大。 |
打开即时通讯服务器openfire的大门的更多相关文章
- 一步一步在ubuntu上安装即时通讯服务器-Openfire
1.首先登录到ubuntu server.在安装openfire 服务器之前,先确保你的系统已经更新到最新.然后输入下面的命令,一行一行执行,最后安装可用的更新 sudo apt-get update ...
- Websocket全讲解。跨平台的通讯协议 !!基于websocket的高并发即时通讯服务器开发。
本博文,保证不用装B的话语和太多专业的语言,保证简单易懂,只要懂JAVAEE开发的人都可以看懂. 本博文发表目的是,目前网上针对Websocket的资料太散乱,导致初学者的知识体系零零散散,学习困难加 ...
- [即时通讯]openfire启动失败解决办法
当你发现你的电脑上的openfire无论你是重新安装还是重启都无法启动的情况下你可以按照我下面写的那些终端指令来启动你的openfire不用再去重新做你的系统了. 一般你发现你的openfire打开出 ...
- 即时通信系统Openfire分析之五:会话管理
什么是会话? A拨了B的电话 电话接通 A问道:Are you OK? B回复:I have a bug! A挂了电话 这整个过程就是会话. 会话(Session)是一个客户与服务器之间的不中断的请求 ...
- 即时通信系统Openfire分析之一:Openfire与XMPP协议
引言 目前互联网产品使用的即时通信协议有这几种:即时信息和空间协议(IMPP).空间和即时信息协议(PRIM).针对即时通讯和空间平衡扩充的进程开始协议SIP(SIMPLE)以及XMPP.PRIM与 ...
- 即时通信系统Openfire分析之四:消息路由
两个人的孤独 两个人的孤独,大抵是,你每发出去一句话,都要经由无数网络.由几百个计算机处理后,出在他的面前,而他就在你不远处. 连接管理之后 Openfire使用MINA网络框架,并设置Connect ...
- 即时通信系统Openfire分析之六:路由表 RoutingTable
还是从会话管理说起 上一章,Session经过预创建.认证之后,才正常可用.认证时,最重要的操作,就是将Session加入到路由表,使之拥用了通信功能. 添加到至路由表的操作,是在SessionMan ...
- 即时通信系统Openfire分析之七:集群配置
前言 写这章之前,我犹豫了一会.在这个时候提集群,从章节安排上来讲,是否合适?但想到上一章<路由表>的相关内容,应该不至于太突兀.既然这样,那就撸起袖子干吧. Openfire的单机并发量 ...
- 即时通信系统Openfire分析之八:集群管理
前言 在第六章<路由表>中,客户端进行会话时,首先要获取对方的Session实例.获取Session实例的方法,是先查找本地路由表,若找不到,则通过路由表中的缓存数据,由定位器获取. 路由 ...
随机推荐
- shell 中 if then语句中会跟着-ne -ge之类的参数的含义
if [ 1 -ne 1 ];then...fi这是指当1不等于1时执行then后的语句 -eq:等于-ne:不等于-le:小于等于-ge:大于等于-lt:小于-gt:大于
- ARMV8体系结构简介
armv8 1.前言 本文的主要内容来源于ARMV8白皮书v5,对ARMV8做一个概述.包含如下的内容: 首先从背景谈起,讲述ARM的发展历程: 之后介绍ARMV8体系结构的基本特征: 介绍A64指令 ...
- shader高级纹理学习总结
最近看了shader的高级纹理 做个总结 复习! shader迟早是要拿下的
- python学习笔记4_类和更抽象
python学习笔记4_类和更抽象 一.对象 class 对象主要有三个特性,继承.封装.多态.python的核心. 1.多态.封装.继承 多态,就算不知道变量所引用的类型,还是可以操作对象,根据类型 ...
- 强化学习(五)—— 策略梯度及reinforce算法
1 概述 在该系列上一篇中介绍的基于价值的深度强化学习方法有它自身的缺点,主要有以下三点: 1)基于价值的强化学习无法很好的处理连续空间的动作问题,或者时高维度的离散动作空间,因为通过价值更新策略时是 ...
- 宝塔服务器面板 部署 thinkphp5 坑
thinkphp5 在宝塔服务器上部署,出现的问题: 1. File not found. 原因: 宝塔服务器默认不支持 pathinfo 的路径访问:需要在软件 - PHP - 管理里面,安装php ...
- ABP之启动配置
ASP.NET Boilerplate提供了在StartUp中配置其模块的基础设施和模型. 配置ASP.NET Boilerplate 配置ABP是在模块的PreInitialize 方法中做的,如下 ...
- python中的线程技术
#!/user/bin/env python # @Time :2018/7/7 11:42 # @Author :PGIDYSQ #@File :DaemonTest.py import threa ...
- jmeter学习记录--05--Beanshell2
学习beanshell时有不少的例子.遇到不少问题.在此记录下. 测试实例列表 A1:使用Beanshell请求作为测试请求 一个打包的Jar包,直接对其内的方法进行测试. 第一步:将接口jar包要放 ...
- NodeJs之EXCEL文件导入导出MongoDB数据库数据
NodeJs之EXCEL文件导入导出MongoDB数据库数据 一,介绍与需求 1.1,介绍 (1),node-xlsx : 基于Node.js解析excel文件数据及生成excel文件. (2),ex ...