Ejabberd源码解析前奏--概述
一、绪论
Ejabberd是一个用Erlang/OTP写的开源即时通讯服务器,其是跨平台、分布式、容错且基于开放标准的实时通讯系统。Ejabberd是一个功能丰富的XMPP服务器,同时适合小规模和超大估摸部署,无论是否需要可伸缩性。
二、关键功能
1、跨平台
Ejabberd可以运行在Microsoft Windows和类Unix系统,例如Linux、FreeBSD和NetBSD。
2、分布式
可以在一个集群的机器上运行Ejabberd,并且所有的机器都服务于同一个或一些Jabbe域,当你需要更大容量的时候,你可以简单地增加一个廉价节点到集群里, 因此,不需要买一个昂贵的高端机器来支持上万个并发用户。
3、容错
可以布署一个Ejabberd集群,这样一个正常运行的服务的所有必需信息将被复制到所有节点. 这意味着如果其中一个节点崩溃了, 其它节点将无中断的继续运行. 另外, 也可以‘不停机’增加或更换节点。
4、易于管理
Ejabberd建立于开源的Erlang,所以不需要安装外部服数据库、外部web服务器, 除此以外,因为每个东西都已经包含在里面且处于开箱可用状态. 其管理上的好处包括:
(1)详尽的文档;
(2)便捷的安装程序,包括在Linux、Mac OS X以及Windows系统下;
(3)Web管理;
(4)共享名册组;
(5)命令行管理工具;
(6)可外部集成的验证机制;
(7)发送匿名消息的能力。
5、国际化
Ejabberd领导国际化,非常适合全球化,相关功能包括:
(1)翻译成25种语言;
(2)支持IDNA。
6、开放标准
Ejabberd是一个完全支持XMPP标准的开源Jabber服务器:
(1)完全兼容XMPP;
(2)基于XML的协议;
(3)支持的协议很多。
三、额外功能
1、模块化
(1)只装载你想要的模块;
(2)用自定义模块扩展Ejabberd。
2、安全性
(1)支持c2s和s2s连接的SASL和STARTTLS;
(2)支持s2s连接的STARTTLS和Dialback;
(3)通过HTTPS安全访问进行Web管理。
3、数据库
(1)快速布署的内部数据库(Mnesia);
(2)原生的MySQL支持;
(3)原生的PostgreSQL支持;
(4)支持ODBC数据存储;
(5)支持Microsoft SQL Server。
4、验证
(1)内部验证;
(2)PAM、LDAP 和 ODBC;
(3)外部验证脚本。
5、其他
(1)支持虚拟主机;
(2)XML流压缩 (XEP-0138);
(3)统计 (XEP-0039);
(4)支持IPv6的c2s和s2s连接;
(5)支持集群和HTML日志的多用户聊天模块;
(6)基于用户vCards的用户目录;
(7)支持基于PubSub的个人事件的发行-订阅组件;
(8)支持web客户端: HTTP轮询和HTTP绑定(BOSH)服务;
(9)IRC网关;
(10)组件支持:安装特定网关之后和外部网络的接口,如 AIM, ICQ 和 MSN。
别看上面列的功能多,实际使用中你会发现都很好用
。
Ejabberd源码解析前奏--概述的更多相关文章
- Ejabberd源码解析前奏--管理
一.ejabberdctl 使用ejabberdctl命令行管理脚本,你可以执行ejabberdctl命令和一些普通的ejabberd命令(后面会详细解说).这意味着你可以在一个本地或远程ejabbe ...
- Ejabberd源码解析前奏--配置
一.基本配置 配置文件将在你第一次启动ejabberd时加载,从该文件中获得的内容将被解析并存储到内部的ejabberd数据库中,以后的配置将从数据库加载,并且任何配置文件里的命令都会被添加到 ...
- Ejabberd源码解析前奏--集群
一.如何工作 一个XMPP域是由一个或多个ejabberd节点伺服的. 这些节点可能运行在通过网络连接的不同机器上. 它们都必须有能力连接到所有其它节点的4369端口, 并且必须有相同的 magic ...
- Ejabberd源码解析前奏--安全
一.防火墙设置 当你配置防火墙的时候,你需要注意以下 TCP 端口: 端口 描述 5222 用于 Jabber/XMPP 客户端连接的标准端口, 纯文本或 STARTTLS. 5223 Jabb ...
- Ejabberd源码解析前奏--调试
一.日志文件 一个ejabberd节点写两个日志文件: ejabberd.log ejabberd 服务日志, 由 ejabberd 节点汇报的消息erlang.log Erlang/OTP 系 ...
- iOS开发之Alamofire源码解析前奏--NSURLSession全家桶
今天博客的主题不是Alamofire, 而是iOS网络编程中经常使用的NSURLSession.如果你想看权威的NSURLSession的东西,那么就得去苹果官方的开发中心去看了,虽然是英文的,但是结 ...
- Spring5源码解析-前奏:本地构建Spring5源码
构建环境 macOS 10.13.6 JDK1.8 IntelliJ IDEA 2018.3.6 (Ultimate Edition) Spring v5.1.9.RELEASE Gradle 5.5 ...
- AspNetCore3.1_Secutiry源码解析_1_目录
文章目录 AspNetCore3.1_Secutiry源码解析_1_目录 AspNetCore3.1_Secutiry源码解析_2_Authentication_核心项目 AspNetCore3.1_ ...
- Java并发包源码学习系列:阻塞队列实现之LinkedBlockingQueue源码解析
目录 LinkedBlockingQueue概述 类图结构及重要字段 构造器 出队和入队操作 入队enqueue 出队dequeue 阻塞式操作 E take() 阻塞式获取 void put(E e ...
随机推荐
- Sqrt函数高效实现
转自一个Sqrt函数引发的血案 我们平时经常会有一些数据运算的操作,需要调用sqrt,exp,abs等函数,那么时候你有没有想过:这个些函数系统是如何实现的?就拿最常用的sqrt函数来说吧,系统怎么来 ...
- ERROR: JDWP Unable to get JNI 1.2 environment, jvm->GetEnv() return code = -2 JDWP exit error AGENT_ERROR_NO_JNI_ENV(183):
eclipse中进行java debug调试时出现上述问题. solution:请在代码最后加入以下语句:System.exit(0)即可.
- Silverlight弹出层(转载)
ChildWindow为Silverlight中的弹出子窗口 可以在项目新建子窗口文件: 相互传值: //父窗体向子窗体传值,需要在ChildWindow中构造函数进行传值ChildWindowTes ...
- java基础知识回顾之javaIO类--java序列化和反序列化
/** * * 一:理解序列化反序列化及其应用 * 序列化:把堆内存的对象转化成字节流的过程. * 反序列化:把字节流序列恢复重构成对象的过程. * 对象的序列化的用途:1.把对象的字节序列持久化, ...
- Android 监测手机联网状态 wifi、移动数据流量、无联网状态
手机当完成联网时会发送一个广播,我们只要创建一个广播接收者即可,代码如下: package com.example.NetworkChangeReceiver2; import android.con ...
- 李洪强iOS开发之initWithFrame,initWithCoder和aweakFormNib
1 initWithFrame 通过代码创建控件的话用这个方法设置 2 initWithCoder(先执行) 与从xib加载有关系的 在此方法里面设置原有子控件的值是不行的,因为还没有连好线 3 ...
- iOS开发 -- 发送JSON数据给服务器
- (void)touchesBegan:(NSSet *)touches withEvent:(UIEvent *)event { // 1.URL NSURL *url = [NSURL URLW ...
- 创业草堂之一:创业的Idea是怎样产生的?
“创业”,在很多人的想象中,就是两个小伙子在车库里.或者在学生寝室里,侃出了一个Idea,然后找到了一个投资人或VC,经过几句话讲解,VC拍手叫绝,10钟内当场拍板,砸下了2000万美金,然后两小伙子 ...
- WCF入门(八)---WCF服务绑定
WCF服务绑定是一个集合,每个元素定义了服务与客户端进行通信方式的几个元素.传输元素和一个消息编码元素各自结合两个最重要的组成部分.这里是WCF服务绑定常用的列表. 基础绑定 基础约束是由basicH ...
- 使用CXF暴露您的REST服务
使用CXF暴露您的REST服务 REST应用服务器SpringBeanServlet 1. 前言 现在互联网Open API流行,将您的Web应用也可以开放Open API给其他第三方使用.达到一 ...