热门标签 | HotTags
当前位置:  开发笔记 > 编程语言 > 正文

【原创】图解hotwheels

2019独角兽企业重金招聘Python工程师标准项目地址:tolbrinohotwheels项目说明:Erlangmessagingservero

2019独角兽企业重金招聘Python工程师标准>>> hot3.png



项目地址: tolbrino/hotwheels
项目说明&#xff1a; Erlang messaging server optimized to send 1 message to 40k subscribers to a topic in <1s

概述

      Janus 是一种消息服务器&#xff0c;专门被优化以便能够处理&#xff0c;以 TCP 单播方式同时发消息给数以千计客户端的场景。这些客户端可以订阅到各种 topic 上。
      终极目标是能够在 20k 客户端同时在线的情况下&#xff0c;进行消息推送时保证延时低于 2 秒。

关于 Janus 的历史

      在罗马神话中 Janus 是天门神&#xff0c;早晨打开天门&#xff0c;让阳光普照人间&#xff0c;晚上又把天门关上&#xff0c;使黑暗降临大地。他的头部前后各有一副面孔&#xff0c;同时看着两个不同方向&#xff0c;一副看着过去&#xff0c;一副看着未来&#xff0c;因此也称两面神&#xff0c;或被尊称为时间之神。罗马有好几座 Janus 神庙。Janus 掌管所有的出入门户&#xff0c;因此罗马人在战时永远将 Janus 神殿的门敞开着&#xff0c;以便军人在败阵时躲入殿内以求庇护&#xff0c;或是在战胜时凯旋入殿。早期的 Janus 神像的两副面孔都有胡子&#xff0c;后来没有胡子&#xff0c;但是一副面孔年轻&#xff0c;另一副面孔年老。Janus 的右手指上刻有数字 CCC&#xff08;300&#xff09;&#xff0c;左手指上刻着数字 LXV&#xff08;65&#xff09;&#xff0c;合在一起恰是一年的天数。从纪元前 1 世纪起&#xff0c;罗马人把祭祀 Janus 的节日和新年结合在一起。罗马的执政官也在元旦这一天就职&#xff0c;并向 Janus 献祭&#xff0c;祈求国家的安宁。为了纪念 Janus&#xff0c;罗马人把正月称为 Januarius&#xff08;mensis&#xff09;&#xff0c;意含“Janus 之月”&#xff0c;英文借用了该词&#xff0c;先作 Januarie&#xff0c;后作 January 。而在英文吸收 January 一词之前&#xff0c;撒克逊人把正月叫作 Wulf-Monath&#xff08;wolf-month&#xff09;&#xff0c;意为“狼月”&#xff0c;因为此时正值严冬&#xff0c;是狼群出没村子寻觅食物的时节。

关于 hotwheels&#xff08;即风火轮&#xff09;的历史

      风火轮&#xff0c;双轮暗藏风火之势&#xff0c;行动间有风雷之声&#xff0c;故称风火轮。可踏在脚下作为交通工具&#xff0c;踏上其轮&#xff0c;念动咒语&#xff0c;上天入地&#xff0c;无所不能。 传说是青鸾火凤所化&#xff0c;一蹬九万里&#xff0c;双足十八万里。传说中为哪吒兵器之一。

监督树总体结构

|janus_app|| (one_for_one)&#43;-------------------&#43;------------------&#43;--------------------&#43;| | | || | | |topman janus_acceptor (supervisor) mapper| || | (simple_one_for_one)&#43;--------&#43;-------| &#43;--------&#43;-------&#43;| | | | | || | | | | |pubsub ... pubsub ... transport ...
(topic:<<"T1">>) (topic:<<"T2">>) || (janus_flash 封装层)|client_proxy
其中
topman - 维护 pubsub 进程和 Topic 的映射关系&#xff1b;
pubsub - 关联特定  Topic 的进程 &#xff1b;维护所有订阅到该 Topic 的进程信息&#xff1b;
janus_acceptor - 处理来自网络的 TCP 连接&#xff1b;动态创建 transport 和 client_proxy 进程&#xff0c;以处理后续协议交互&#xff1b;
transport - 针对某个 TCP 连接上的数据处理&#xff1b;
client_proxy - 实际处理订阅&#xff0c;取消订阅&#xff0c;以及消息推送的模块&#xff1b;
mapper 提供轻量级进程注册管理功能&#xff1b;

subscriber 行为

 

janus 针对 subscribe 的内部处理


publisher 行为


janus 针对 publish 的内部处理

协议细节

subscriber 协议交互


对应

flashbot janus,0,PING,0---------------------------------------------->{"timestamp":[1448,434925,303633],"token":[55,97,55,100,48,102,56,98,102,97,97,49,54,101,48,48,48,100,101,99,54,55,48,57,55,99,101,99,97,99,56,56]},1<----------------------------------------------,0,{"action":"subscribe","data":"events"},0---------------------------------------------->ACK,1<----------------------------------------------{"timestamp":[1448,434925,395864],"topic":"events","event":"test_event","message_id":"","data":"test"},1<----------------------------------------------,0,{"action":"unsubscribe","data":"events"},0----------------------------------------------> 对应

00000000 3c 72 65 67 75 6c 61 72 2d 73 6f 63 6b 65 74 2f 00000010 3e 00 50 49 4e 47 00 >.PING.00000000 7b 22 74 69 6d 65 73 74 61 6d 70 22 3a 5b 31 34 {"timest amp":[1400000010 34 38 2c 34 33 34 39 32 35 2c 33 30 33 36 33 33 48,43492 5,30363300000020 5d 2c 22 74 6f 6b 65 6e 22 3a 5b 35 35 2c 39 37 ],"token ":[55,9700000030 2c 35 35 2c 31 30 30 2c 34 38 2c 31 30 32 2c 35 ,55,100, 48,102,500000040 36 2c 39 38 2c 31 30 32 2c 39 37 2c 39 37 2c 34 6,98,102 ,97,97,400000050 39 2c 35 34 2c 31 30 31 2c 34 38 2c 34 38 2c 34 9,54,101 ,48,48,400000060 38 2c 31 30 30 2c 31 30 31 2c 39 39 2c 35 34 2c 8,100,10 1,99,54,00000070 35 35 2c 34 38 2c 35 37 2c 35 35 2c 39 39 2c 31 55,48,57 ,55,99,100000080 30 31 2c 39 39 2c 39 37 2c 39 39 2c 35 36 2c 35 01,99,97 ,99,56,500000090 36 5d 7d 01 6]}.
00000017 3c 72 65 67 75 6c 61 72 2d 73 6f 63 6b 65 74 2f 00000027 3e 00 7b 22 61 63 74 69 6f 6e 22 3a 22 73 75 62 >.{"acti on":"sub
00000037 73 63 72 69 62 65 22 2c 22 64 61 74 61 22 3a 22 scribe", "data":"
00000047 65 76 65 6e 74 73 22 7d 00 events"} .00000094 41 43 4b 01 ACK.00000098 7b 22 74 69 6d 65 73 74 61 6d 70 22 3a 5b 31 34 {"timest amp":[14000000A8 34 38 2c 34 33 34 39 32 35 2c 33 39 35 38 36 34 48,43492 5,395864000000B8 5d 2c 22 74 6f 70 69 63 22 3a 22 65 76 65 6e 74 ],"topic ":"event000000C8 73 22 2c 22 65 76 65 6e 74 22 3a 22 74 65 73 74 s","even t":"test000000D8 5f 65 76 65 6e 74 22 2c 22 6d 65 73 73 61 67 65 _event", "message000000E8 5f 69 64 22 3a 22 22 2c 22 64 61 74 61 22 3a 22 _id":"", "data":"000000F8 74 65 73 74 22 7d 01 test"}.
00000050 3c 72 65 67 75 6c 61 72 2d 73 6f 63 6b 65 74 2f 00000060 3e 00 7b 22 61 63 74 69 6f 6e 22 3a 22 75 6e 73 >.{"acti on":"uns
00000070 75 62 73 63 72 69 62 65 22 2c 22 64 61 74 61 22 ubscribe ","data"
00000080 3a 22 65 76 65 6e 74 73 22 7d 00 :"events "}.

publisher 协议交互


对应

flashbot janus,0,PUBLISH,0{"topic":"events","event":"test_event","message_id":"","data":"test"}---------------------------------------------->{"timestamp":[1448,434925,395595],"token":[100,52,97,53,56,51,54,99,57,97,50,52,50,57,52,57,55,48,52,102,48,100,99,53,102,55,56,101,101,97,53,98]},1<---------------------------------------------- 对应

00000000 3c 72 65 67 75 6c 61 72 2d 73 6f 63 6b 65 74 2f 00000010 3e 00 50 55 42 4c 49 53 48 00 7b 22 74 6f 70 69 >.PUBLIS H.{"topi
00000020 63 22 3a 22 65 76 65 6e 74 73 22 2c 22 65 76 65 c":"even ts","eve
00000030 6e 74 22 3a 22 74 65 73 74 5f 65 76 65 6e 74 22 nt":"tes t_event"
00000040 2c 22 6d 65 73 73 61 67 65 5f 69 64 22 3a 22 22 ,"messag e_id":""
00000050 2c 22 64 61 74 61 22 3a 22 74 65 73 74 22 7d ,"data": "test"}00000000 7b 22 74 69 6d 65 73 74 61 6d 70 22 3a 5b 31 34 {"timest amp":[1400000010 34 38 2c 34 33 34 39 32 35 2c 33 39 35 35 39 35 48,43492 5,39559500000020 5d 2c 22 74 6f 6b 65 6e 22 3a 5b 31 30 30 2c 35 ],"token ":[100,500000030 32 2c 39 37 2c 35 33 2c 35 36 2c 35 31 2c 35 34 2,97,53, 56,51,5400000040 2c 39 39 2c 35 37 2c 39 37 2c 35 30 2c 35 32 2c ,99,57,9 7,50,52,00000050 35 30 2c 35 37 2c 35 32 2c 35 37 2c 35 35 2c 34 50,57,52 ,57,55,400000060 38 2c 35 32 2c 31 30 32 2c 34 38 2c 31 30 30 2c 8,52,102 ,48,100,00000070 39 39 2c 35 33 2c 31 30 32 2c 35 35 2c 35 36 2c 99,53,10 2,55,56,00000080 31 30 31 2c 31 30 31 2c 39 37 2c 35 33 2c 39 38 101,101, 97,53,9800000090 5d 7d 01 ]}.




转:https://my.oschina.net/moooofly/blog/546871



推荐阅读
  • 本文介绍了在开发Android新闻App时,搭建本地服务器的步骤。通过使用XAMPP软件,可以一键式搭建起开发环境,包括Apache、MySQL、PHP、PERL。在本地服务器上新建数据库和表,并设置相应的属性。最后,给出了创建new表的SQL语句。这个教程适合初学者参考。 ... [详细]
  • Centos7.6安装Gitlab教程及注意事项
    本文介绍了在Centos7.6系统下安装Gitlab的详细教程,并提供了一些注意事项。教程包括查看系统版本、安装必要的软件包、配置防火墙等步骤。同时,还强调了使用阿里云服务器时的特殊配置需求,以及建议至少4GB的可用RAM来运行GitLab。 ... [详细]
  • 关于我们EMQ是一家全球领先的开源物联网基础设施软件供应商,服务新产业周期的IoT&5G、边缘计算与云计算市场,交付全球领先的开源物联网消息服务器和流处理数据 ... [详细]
  • ZSI.generate.Wsdl2PythonError: unsupported local simpleType restriction ... [详细]
  • 本文介绍了RPC框架Thrift的安装环境变量配置与第一个实例,讲解了RPC的概念以及如何解决跨语言、c++客户端、web服务端、远程调用等需求。Thrift开发方便上手快,性能和稳定性也不错,适合初学者学习和使用。 ... [详细]
  • 本文介绍了计算机网络的定义和通信流程,包括客户端编译文件、二进制转换、三层路由设备等。同时,还介绍了计算机网络中常用的关键词,如MAC地址和IP地址。 ... [详细]
  • 安装oracle软件1创建用户组、用户和目录bjdb节点下:[rootnode1]#groupadd-g200oinstall[rootnode1]#groupad ... [详细]
  • Python15行代码实现免费发送手机短信,推送消息「建议收藏」
    Python15行代码实现免费发 ... [详细]
  • 概述H.323是由ITU制定的通信控制协议,用于在分组交换网中提供多媒体业务。呼叫控制是其中的重要组成部分,它可用来建立点到点的媒体会话和多点间媒体会议 ... [详细]
  • Thisworkcameoutofthediscussioninhttps://github.com/typesafehub/config/issues/272 ... [详细]
  • adfs是什么_培训与开发的概念
    adfs是什么_培训与开发的概念(如您转载本文,必须标明本文作者及出处。如有任何疑问请与我联系me@nap7.com)ADFS相关开发技术的中文资料相对匮乏,之前在弄这个东西的时候 ... [详细]
  • Linux如何安装Mongodb的详细步骤和注意事项
    本文介绍了Linux如何安装Mongodb的详细步骤和注意事项,同时介绍了Mongodb的特点和优势。Mongodb是一个开源的数据库,适用于各种规模的企业和各类应用程序。它具有灵活的数据模式和高性能的数据读写操作,能够提高企业的敏捷性和可扩展性。文章还提供了Mongodb的下载安装包地址。 ... [详细]
  • GPT-3发布,动动手指就能自动生成代码的神器来了!
    近日,OpenAI发布了最新的NLP模型GPT-3,该模型在GitHub趋势榜上名列前茅。GPT-3使用的数据集容量达到45TB,参数个数高达1750亿,训练好的模型需要700G的硬盘空间来存储。一位开发者根据GPT-3模型上线了一个名为debuid的网站,用户只需用英语描述需求,前端代码就能自动生成。这个神奇的功能让许多程序员感到惊讶。去年,OpenAI在与世界冠军OG战队的表演赛中展示了他们的强化学习模型,在限定条件下以2:0完胜人类冠军。 ... [详细]
  • OWASP(安全防护、漏洞验证工具)开放式Web应用程序安全项目(OWASP,OpenWebApplicationSecurityProject)是一个组织 ... [详细]
  • 我正在尝试将Firebase添加到涉及添加以下内容的现有应用程序中:classpath'com.googl ... [详细]
author-avatar
暖暖252
这个家伙很懒,什么也没留下!
PHP1.CN | 中国最专业的PHP中文社区 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved | 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有