最近公司业务主要是移动客户端,所以免不了客户端与服务端之间的通信。第一次接触通信,做点基本概念的笔记。

主要架构是:openfire+xmpp+play+移动客户端,下文理下这几个概念。

OpenFire是什么?
简单来说,OpenFire是一个采用纯Java语言编写(核心架构使用Mina构建)的开源RTC(Real-Time Communications,实时协作)服务器。它采用XMPP协议进行分布式通信,该协议的前身其实就是基于Jabber协议,只不过XMPP对其进行了部分扩展。说到底XMPP协议无非就是一个基于TCP/IP协议的扩展协议,它采用XML的方式进行数据传输,以此满足体系结构的中立。

OpenFire能做什么?
即时通信(IM,Instant Messenger)相信大家都应该听说过,比如我们常用的QQ、微信、米聊等等都是IM系统。那么这和OpenFire有什么关系呢?OpenFire既然是RTC服务器,自然开发人员就可以利用它构件一个具备高性能的即时通信服务器。OpenFire的性能如何呢?经过笔者和同事对其进行压力测试后发现,一台主流的8/16G服务器,在不集群(cluster)的情况下,使用多个Connection Manager(连接管理器)对OpenFire进行连接负载均衡,并对OpenFire做了一定的优化后,其完全可以承受住约10-20万左右的并发操作,如果session中不存储集合对象,抗住30-40万左右的高并发操作也不是没有可能。假设OpenFire无法满足你的应用需求时,开发人员完全可以对OpenFire的源码进行二次开发,使用插件的方式对其功能进行扩充,这一切都是OpenFire带给你的实惠。

Smack是什么?
即时通信客户端编程库。是一个XMPP 协议的Java 实现,提供一套可扩展的API,不过有些时候,你还是不得不使用自己定制发送的XML 文件内容的方式来实现自己的功能。

XMPP(Extensible Messaging and Presence Protocol)
简单的来讲,它就是一个发送接收处理消息的协议,但是这个协议发送的消息,既不是二进制的东东也不是字符串,而是XML。正是因为使用了XML作为消息传递的中介,Extensible 才谈的上。XMPP的前身是Jabber,一个开源形式组织产生的网络即时通信协议。XMPP目前被IETF国际标准组织完成了标准化工作。

play framework的作用
客户端将用户请求封装称json格式,以http请求发送到!play服务器,!play服务器对json数据做相关解析和持久化操作以后,再将消息以xmpp协议的格式封装到json,并发送给openfire。smack作为openfire的插件收到的json,并解析出消息主题datas部分,利用openfile广播给客户端。

关于RTC的浅学的更多相关文章

  1. junit浅学笔记

    JUnit是一个回归测试框架(regression testing framework).Junit测试是程序员测试,即所谓白盒测试,因为程序员知道被测试的软件如何(How)完成功能和完成什么样(Wh ...

  2. 浅学JavaScript

    JavaScript是互联网上最流行的脚本语言,可广泛用于服务器.PC.笔记本电脑智能手机等设备: 对事件的反应: <!DOCTYPE html> <html> <hea ...

  3. opengl 入门浅学(一)

    因为要做图形学的实验,又是要以OPENGL为基础,所以就稍微在网上查了一些资料. 我是带着目的去学习的,所以就没有打基础之类的学很深,浅尝. 今天试着搭简单框架,画出一个图形.大神请出门左转. #in ...

  4. 浅学html

    数据库web端需要了解html等语言,就初浅学习一下 <!DOCTYPE html> <html> <head> <meta charset="ut ...

  5. Python内存解析浅学

    1.内存管理 首先理解变量,和内存特性 1.       Python中无须声明变量, 2.       无须指定类型 3.       不用关心内存管理 4.       变量名会被回收 5.    ...

  6. 【算法】浅学 LCA

    参考资料 浅析最近公共祖先(LCA) 最近公共祖先 - OI Wiki [白话系列]倍增算法 一.概念 最近公共祖先称为 LCA (Lowest Common Ancestor) 它指的是在一颗树中, ...

  7. [大数据之Yarn]——资源调度浅学

    在hadoop生态越来越完善的背景下,集群多用户租用的场景变得越来越普遍,多用户任务下的资源调度就显得十分关键了.比如,一个公司拥有一个几十个节点的hadoop集群,a项目组要进行一个计算任务,b项目 ...

  8. HP滤波原理浅学

    今天偶然看到如果使用eviews做HP滤波,一时好奇,于是找了点资料看看~ 由于纯属自学,没有找到教材,大家姑且一看咯,也不知道对不对哈.

  9. [浅学] 1、Node.js尝试_安装&运行第一个helloworld

    官网:https://nodejs.org/ 介绍:Node.js® is a platform built on Chrome's JavaScript runtime for easily bui ...

随机推荐

  1. python 统计单词出现次数

    #use python3.6 import re from collections import Counter FILESOURCE = './abc.txt' def getMostCommonW ...

  2. #!/usr/bin/python和#!/usr/bin/env 的区别(转)

    #!/usr/bin/python和#!/usr/bin/env 的区别   #!/usr/bin/python 通常在一个.py文件开头都会有这个语句 它只在Linux系统下生效,意思是当作为可执行 ...

  3. 转 Oracle 11g服务详细介绍

    转自http://www.cnblogs.com/userWuLiang/archive/2013/04/13/3017900.html Oracle 11g服务详细介绍及哪些服务是必须开启的? 成功 ...

  4. ubuntu14.04 spring cloud config server + gradle搭建

    Server端:在eclipse上,创建Java Project项目.自带的src包删掉手动建文件夹.基础的目录文件都创建上 |--ZSpringCloud|--build.gradle|----sr ...

  5. PyVmomi 使用示例

    PyVmomi: VMware vSphere Python SDK 一.OverView 重点知识: 1.view_type = [vim.VirtualMachine] 2.content.vie ...

  6. BEM —— 源自Yandex的CSS 命名方法论

    原文链接: https://segmentfault.com/a/1190000000391762 人们问我最多的问题之一是在CSS类名中--和__是什么意思?它们的出现是源于BEM和Nicolas ...

  7. C++的异常捕获

    听课笔记: #define _CRT_SECURE_NO_WARNINGS #include<iostream> using namespace std; void fun() { ;// ...

  8. cscope usage

    1) Reference: Linux 平台下阅读源码的工具链 程序员的利器 – cscope 2) cscope help: :help cscope :help cscope-suggestion ...

  9. php: xampp安装对应的phalcon版本(3.2.2-php5.6):比如redis-php5.6, php_igbinary-5.6

    php: xampp安装对应的phalcon版本(3.2.2-php5.6):比如redis-php5.6, php_igbinary-5.6 一.php安装redis扩展   1.使用phpinfo ...

  10. 分享知识-快乐自己:三种代理(静态、JDK、CGlib 代理)

    1):代理模式(静态代理)点我下载三种模式源码 代理模式是常用设计模式的一种,我们在软件设计时常用的代理一般是指静态代理,也就是在代码中显式指定的代理. 静态代理由 业务实现类.业务代理类 两部分组成 ...