推送及IM
主要介绍推送系统以及IM系统设计相关的文章和总结。
逍遥子_
重点关注大并发处理、分布式计算、微服务、物联网、大数据等领域
展开
-
MQTT协议简介
这里写自定义目录标题欢迎使新的改变功能快捷键合理的创建标题,有助于目录的生成如何改变文本的样式插入链接与图片如何原创 2021-03-17 10:45:56 · 1032 阅读 · 0 评论 -
Mosquito使用SSL/TLS进行安全通信时的使用方法
1、 SSL简介SSL(SecureSocket Layer)安全套接层,是网景公司提出的用于保证Server与client之间安全通信的一种协议,该协议位于TCP/IP协议与各应用层协议之间,即SSL独立于各应用层协议,因此各应用层协议可以透明地调用SSL来保证自身传输的安全性,SSL与TCP/IP协议及其其他应用层协议之间的关系如图1所示。 图1 SSL/TLS协议与应用层原创 2014-04-22 13:55:14 · 32987 阅读 · 3 评论 -
Windows下openssl的下载安装和使用
安装openssl有两种方式,第一种直接下载安装包,装上就可运行;第二种可以自己下载源码,自己编译。下面对两种方式均进行详细描述。一、下载和安装openss方法一:直接使用openssl安装包Window 的openssl的安装包的下载地址为:http://slproweb.com/products/Win32OpenSSL.html一般在安装openssl之前还需要vs的一些原创 2014-05-14 15:57:22 · 143428 阅读 · 4 评论 -
java版mosquitto客户端使用SSL功能的具体操作总结
在开发java版mosquitto客户端程序时需要使用paho库,如果开发的java客户端要用ssl功能,则需要Bouncy Castle库;在使用ssl功能时,需要证书文件进行进行身份认证,但在测试过程中,只自己制作ca并进行证书签发即可。在测试过程中首先创建一个统一的ca,该ca包括一个crt文件,一个key文件(例如ca.crt、ca.key);测试过程中,要使用该ca为每个测试的机原创 2015-06-01 10:05:42 · 5242 阅读 · 2 评论 -
Mosquito的优化——epoll优化(七)
原版的mosquito在移动互联网情况下,其性能不高,实际运营时一个mosquito实例能支持2万连接就不错了;mosquitto在网络状态不好的情况下,随着用户量的上升,其对cpu消耗将大幅增加,主要的CPU主要消耗在以下几个方面:(1)Poll机制的缺陷;(2)Mosquitto内部订阅树机制的缺陷;(3)其他消息发送,数据结构管理方面的缺陷;本节将针对这些缺陷提出相应的优化策原创 2015-06-08 15:44:59 · 10553 阅读 · 12 评论 -
Mosquito的优化——订阅树优化(八)
8.1 mosquitto的订阅树机制在mosquitto原始版本中,所有的订阅关系都是通过一颗订阅树来维护,在订阅树中,topic将被按照“/”组织成树状结构,如图5-3所示的订阅树,其中订阅树的每个节点都是一个topic分级,每个节点对应的topic就是从根节点到当前节点所组成的topic,每个节点旁边的星状列表即是该节点所对应的订阅列表。图8-1 订阅树在mosqu原创 2015-06-08 15:57:08 · 7858 阅读 · 6 评论 -
Mosquito的优化——其他优化(九)
9.1、空闲空间管理机制优化Mosquito原始版本程序中,有新的连接进来时,需要扫描整个context,查找一个空闲的位置以存放新连接产生的context,如果找不到空闲位置,则使用realloc再扩充一个context的位置。这种操作方式有两点非常低效:1) 扫描context,每次有新连接进来的时候都要扫描context数组以查找一个空闲的context位置;2) 当前con原创 2015-06-08 16:03:26 · 4922 阅读 · 2 评论 -
ip别名及其在tcp压力测试时候的作用
通常在对服务器程序进行压力测试时,需要客户端模拟大量的tcp连接,以对服务器端产生强大的压力,但是由于linux端口号的限制,每个客户端ip顶多能发起6.4w左右的连接,详情可参考:http://blog.youkuaiyun.com/houjixin/article/details/18737881或者:http://houjixin.blog.163.com/blog/static/35628410201...原创 2015-07-31 17:03:43 · 2228 阅读 · 1 评论 -
使用 logrotate对centos中各服务程序的日志文件进行转储
1.mosquitto的日志输出方式简介mosquitto是一个纯C的代码,它的日志输出支持若干中日志输出方式,通过修改配置项:log_dest即可完成对各种日志输出类型的切换,常见的日志输出类型有有下几种:(1)控制台输出stdout、stderrrlog_dest stderr(2)输出到日志文档log_dest file /home/logs/mosquitto/mosquitto.log【原创 2017-05-23 18:40:03 · 4352 阅读 · 0 评论 -
mosquitto鉴权插件的开发与说明(一)
1. mosquitto的插件的接口在文件mosquitto_plugin.h中进行了声明,在创建自己的鉴权插件代码中必须包含头文件mosquitto_plugin.h,并且实现该头文件中声明的所有鉴权接口函数(接口函数mosquitto_log_printf除外)。2. mosquitto插件的权限校验方式由头文件mosquitto_plugin.h中声明的接口函数所限制,共原创 2017-08-02 17:54:59 · 8703 阅读 · 2 评论 -
select,poll,epoll区别
原文地址:http://blog.youkuaiyun.com/Sunboy_2050/article/details/5971779select的本质是采用32个整数的32位,即32*32= 1024来标识,fd值为1-1024。当fd的值超过1024限制时,就必须修改FD_SETSIZE的大小。这个时候就可以标识32*max值范围的fd。对于单进程多线程,每个线程处理多个fd的情况,sel转载 2013-07-24 10:20:14 · 1232 阅读 · 0 评论 -
关于socket的一些总结
在linux下socket是用一个文件描述符来表示,对于linux来说从某个socket读数据和从某个文件读数据是一样的;linux下文件描述符的范围是1024,也就是有个用户进行所能使用的最大的文件描述符的数量不能超过此值,但是这个值可以进行修改,在服务器程序中,该值可以修改为10w、20w甚至更大的值。 socket可以用一个五元组来标识:例如:地址为A的主机欲用tc原创 2014-01-24 16:50:27 · 2974 阅读 · 0 评论 -
tcp对连接断开的感知——保活定时器
根据tcp/ip协议的描述,tcp连接建立之后,如果双方没有通信,连接可以一直保存下去,假如中间路由器崩溃或者中间的某条线路断开,只要两端的主机没有被重启,连接就一直被保持着。 在实际应用中,这是一个很重要的问题:在很多时候服务器与客户端建立tcp连接之后,基于各种异常原因,经常发生客户端还没有来得及向服务器发送断开连接时就崩溃掉了的问题,服务器就需要能够感知这种变化。然而,TCP规范原创 2014-02-13 10:19:54 · 5104 阅读 · 0 评论 -
mosquitto源码分析(一)
本文由逍遥子撰写,转发请标注原址:http://blog.youkuaiyun.com/houjixin/article/details/21461225一、 Mosquitto简介mosquitto是一款实现了消息推送协议MQTT v3.1 的开源消息代理软件,提供轻量级的,支持可发布/可订阅的的消息推送模式,使设备对设备之间的短消息通信变得简单,例如现在应用广泛的低功耗传感器,手原创 2014-03-18 15:22:26 · 25245 阅读 · 2 评论 -
mosquitto源码分析(二)
一、 Mosquito的数据结构1) struct mosquito结构体struct mosquito主要用于保存一个客户端连接的所有信息,例如用户名、密码、用户ID、向该客户端发送的消息等,其定义为:struct mosquitto { int sock; char*address; char *id; char*username; ch原创 2014-03-18 15:24:27 · 12237 阅读 · 3 评论 -
mosquitto源码分析(四)
3.1.2、使用订阅树发布消息在Mosquito程序中,消息发送过程主要通过遍历订阅树来完成,具体为:递归遍历订阅树找到指定的订阅列表,并将消息挂到订阅列表中的每个contextg的消息队列中,如果消息的retain字段被设置为1,则mosquitto还需要保存此消息,以备新订阅的客户端可以立即收到上次发送的消息;另外,发往系统topic的消息也会被mosquitto保存起来。上述消息发送过程原创 2014-03-18 15:52:28 · 10002 阅读 · 4 评论 -
mosquitto源码分析(五)
3.2.1、poll机制简介Poll机制是一种I/O多路转接(I/O multiplexing)技术,这种技术先构造一个有关描述符的表,然后调用一个函数,知道这些描述符中的一个已准备就绪好进行I/O时,该函数才返回,该函数返回之后它告诉进程那些描述符已经准备好进行I/O)。其工作过程为:(1)首先构造一个pollfd结构数组,每个数组元素指定一个描述符编号以及对其所关心的状态。(2)为原创 2014-03-18 16:02:52 · 9347 阅读 · 5 评论 -
mosquitto源码分析(六)
一、 Mosquito的辅助功能介绍Mosquitto代码的辅助功能主要包括:log输出功能、配置参数管理功能和内存封装的功能,这三个功能虽不是mosquitto的核心模块,但是却在其源码实现中经常遇到,它们的实现给mosquitto的代码开发带来了很大的方便。4.1、log输出功能Mosquitto日志输出功能的实现代码主要在文件/ mosquitto-1.2/src/loggin原创 2014-03-18 16:04:53 · 8096 阅读 · 4 评论 -
TCP通信的基本流程
1. 简单的示例伪程序服务端伪代码:// 1. 建立一个监听socket listen_socket = socket(AF_INET, SOCK_STREAM, 0); // 2. 创建一个监听socket绑定的本地地址结构体 serverAddr.sin_family = AF_INET; serverAddr.sin_addr.s_addr = h原创 2016-01-21 11:09:29 · 5887 阅读 · 0 评论 -
关于推送系统设计的一些总结与思考(三)
**四、 推送系统的集群化**4.1长连接集群推送系统作为一项基础服务,它需要承载全部在线用户量,对于移动互联网行业,在设计之初的期望目标用户量就非常大,并且用户未来一段时间的增长量通常难以预估,因此要求在设计推送系统时,都要求能够集群化部署、支持动态扩展。那么长连接集群化设计时需要解决那些问题呢? 个人认为长连接服务需要解决三个问题:路由、管理和动态扩展;另外,如果想要锦上添花,让长连接通道更加原创 2016-11-24 19:43:51 · 3411 阅读 · 0 评论 -
关于推送系统设计的一些总结与思考(二)
**三、 消息推送的工作模式** 常见的消息推送系统的工作模式有:推模式、拉模式以及推拉混合模式三种,在很多推送系统中,采用在线消息直接推送下去,离线消息让客户端拉取,这种方式很容易造成漏消息的问题。本节将介绍几种“特殊定义“的推送模式的特点和应用场景,它们的含义与通常理解的略微有些差异。 在线用户:个人认为在线用户是指网络正常、弱网、网络异常等情况下的用户,这些用户实际上正在使用系统,只是由于原创 2016-11-24 19:40:05 · 10179 阅读 · 0 评论 -
关于推送系统设计的一些总结与思考(一)
消息与通知本文中的消息是指交给推送系统的待发送字符串;通知是指推送系统内部,通过长连接服务发送给客户端的通知字符串,它只在推送系统内部使用,对于使用推送系统的上层应用无法感知其存在;一、 安全性在推送系统中,安全性最受关注的是长连接的安全管控,以及数据在长连接通道上传输的安全性。举个针对长连接的安全管控的例子:有人知道你的长连接服务的IP地址和端口之后伪造大量的TCP连接,将会对长连接服务器端产生的原创 2016-11-24 19:11:03 · 5547 阅读 · 0 评论