新年10个Flag实现中~
访问量
957.1K
文章数
127
运行天
835
前言在接触到MQTT之后,总是会有疑问,为什么用MQTT不用TCP长连接透传?看起来【TCP长连接+私有协议透传】和【MQTT+业务主题】似乎都能达到同样的目的,甚至用MQTT会使得设备端逻辑实现、APP端逻辑实现、云端架构实现更加复杂。那么为什么物联网还要使用MQTT协议呢?一、MQTT相比于TCP长连接的优势1、协议更标准MQTT是标准的RFC协议,相比于私有协议而言更加标准。好处在于:(1)协议非常完整,能够马上用于生产。各端实现同一套协议之后,就能进行通信;私有协议还需要进行大量的验证,看有无缺陷或欠考虑的地方等。(2)协议的标准化带来大量的开源组件,降低开发难度。随着物联网+5G生态越来越好,开源组件越来越多,可以减少重复编码量。(3)标准协议利于第三方接入。当第三方设备、平台想要
前言经常会遇到在windows上上传文件到AWSS3的需求,由于某些原因不方便直接使用AWS提供的HTTP界面去上传文件,只好用脚本上传。在windows上更多的是编译好了一个程序想放到AWS的机器跑一跑,用S3做文件中转。直接用脚本的话,每次都要输入对应的文件路径,比较麻烦,更想有个GUI界面选择文件后自动把路径填上去,AWS提供了boto3这个库,支持java、python等等,我们用python3来做这件事。一、前期准备(1)IDE:推荐使用PyCharm,方便的是当有库没有安装时会提示你Alt+Enter快速安装(2)Python:3.6+(3)python库安装:用pip3install提前安装好所有的库aws库:boto3,官方文档和示例python打包成EXE库:pyinsta
一、top经典界面参数含义1、系统状态top-21:36:59up13days,45min,1user,loadaverage:0.35,0.12,0.04现在的系统时间:21:36:59系统已经启动了:13天45分钟用户数量:1个系统平均负载1分钟、5分钟、15分钟:0.35、0.12、0.04系统平均负载指的是,在特定时间间隔内运行队列中的平均进程数。一个进程通常会在没有等待I/O操作、没有主动进入等待状态、没有被中止的情况下处于运行态。Top的这个系统平均负载是每隔5秒检查一次活跃进程数计算得到的,如果这个数值除以逻辑CPU的数量:<0.70:正常0.70~1.00:有一些负荷了,需要检查1.00~5.00:刚好1个CPU处理1个进程,但占用了全部的CPU资源,应该马上检查进程是
前言无意间搜到一篇知乎技术团队一个月前(2019年5月24日)发表的《知乎千万级高性能长连接网关揭秘》,浏览了内容和评论后兴奋了起来,这感觉就像考试之后对答案发现另一个同学的解题思路跟你一模一样而且别人已经考了150分。分布式服务器最头疼的就是长连接了,下面结合知乎的做法,具体说一说长连接网关的设计难点和解决思路。一、长连接网关的需求分析对于安卓APP的应用,长连接能提供推送消息、即时通讯、游戏、共享定位等等功能,也就是适用于需要服务器主动往客户端“推”的业务场景。随着业务规模的扩大,不同的业务可能都会需要长连接,所以现在几乎每个互联网公司都会将长连接系统做成一个基础服务供后面的业务使用。知乎团队称自己的这套长连接网关设计方案“经过一年多开发和演进,面向数个APP,数百万设备同时在线,经历了
前言百度IoT的Broker设计我特别想参考的但是技术能力和时间不够去实现……网上只有一篇百度工程师的总结《共享行业的分布式MQTT设计》,这里将围绕这篇文章去讲解。一、Broker集群架构单机版MQTTBroker有连接数量和并发处理能力的限制,因此分布式必不可少。百度IoT采用的AkkaCluster来做集群管理,每个节点对等,不存在像Mosquitto这种用一台机器“桥接”做分布式产生的单点故障隐患。每个节点监听MemberUp、MemberDown、MemberUnreachable、ClusterMemberState等事件来感知其他节点的上下线,用AkkaActor实现节点间的消息通信。二、Broker服务框架百度Broker抽象了很多服务包括:(1)Authentication
前言了解TCP的KeepAlive机制有利于服务器调参。TCP的KeepAlive没错,和想象的一样,通过“心跳包”来检查链路是否连通,但在标准的TCP规范中,并没有保活的强制性要求。传输层KeepAilve缺点在传输层做保活有很多缺点:(1)如果中间链路出现短暂的差错(比如某个路由器重启),可能会使得一个非常好的链路被释放掉(2)心跳包耗费了不必要的带宽,增加了流量费用(3)在一些复杂的网络环境下(比如某些网络不响应不带数据的报文),TCP保活机制可能会失效。TCP的KeepAlive机制描述但事实上,许多实现都提供了KeepAlive的功能(默认关闭)。  如果一个给定的连接在7200秒(2小时)内没有任何动作,那么服务器就向客户端发送一个探查报文段,此时客户机可能处
前言基于EMQ2.3.11。Mnesia是分布式电信数据库管理系统,有以下特性:DBMS查询语言数据持久性:表是持久化到存储的集群复制:表可以在多个节点上复制原子事务:支持事务透明:对编程来说是透明的实时数据搜索:查询速度很快一、Mnesia表的创建参数1、type表类型【取值】set:唯一键值,1:1,一个键一条记录ordered_set:唯一键值,1:1,带排序bag:1:n,一个键可以映射很多条记录2、record_name记录名称【取值】记录名所有表中的记录都必须是同一个记录的实例3、ram_copies内存复制【取值】节点列表可以指定要备份到哪些节点的内存中去,不保证事务更新。可以定时刷盘。4、disc_copies磁盘复制【取值】节点列表  指定要备份到哪些节
前言有时候看不懂代码,可以直接去debug一些模块,写一些单元测试。虽然Erlang提供了专门的单元测试方法,但由于没有整体配置(暂时不想二次开发),有一些模块无法启动,所以干脆只把需要的代码拷贝出来做debug观察数据,从而理解原理。整个分析基于EMQ2.3.11。一、调试方法1、准备好一个空Erlang工程参考《EMQ源码分析(一):在Windows上用IDEA搭建Erlang编译平台》,构建一个Helloworld就好。2、拷贝代码将需要测试的部分代码从EMQ里面拷贝出来,例如我想要了解订阅树如何构建的,就需要了解Topic如何被切分成三元组的,三元组具体的数据又是怎样的,把emqttd_trie、emqttd_topic相关代码拷贝出来:-module(hello).-author(
上一页 12345... 14下一页