移动互联网长连接方案实例

互联网推送服务原理:长连接+心跳机制(MQTT协议) 在将这个之前我们先来了解一下 mqtt,MQTT(Message Queuing Telemetry Transport,消息队列遥测传输)是IBM开发的一个即时通讯协议,有可能成为物联网的重要组成部分。该协议支持所有平台,几乎可以把所有联网物品和外部连接起来,被用来当做传感器和致动器(比如通过Twitter让房屋联网)的通信协议。 MQTT协议是为大量计算能力有限,且工作在低带宽、不可 阅读详情

1.笔者本人现在在一家创业公司担当整个平台架构的角色,而这家公司是做一移动互联网相关的一些应用产品,由其现在正在和中国最大的互联网公司之一进行合作,负责该互联网公司的手机终端的长连接推送服务,所以有一些总结特在此和大家分享一下。


2.下面这篇文章是笔者在几个月前做的一篇长连接的总结,所以可能写的不是非常严谨,特给javaer们进行一些参考即可,有如下几个数据和大家一起分享下:

    1) 单JVM实现了50W以上长连接,每秒消息处理“Hello Word”和心跳包6W次

    2)该长连接,不仅实现了手机终端的摸拟,而且该框架也是一个成熟的RPC框架,已经在笔者所在的公司使用。比阿里巴巴开源版本出来的"dubbo"性能要高,而且更节省带宽,大家可以测试比较一下。

    3)因为netty支持的长连接,每条连接占有用内存是5K,笔者经过包装之后每条连接占用5.3K, 每条长连接系统要占用8K;所以大家可以计算一下每条长连接一共要消耗的系统内存量。

    4)通过“3)”我们可以计算,50W长连接需要多少内存量(JVM):500000*5.3K=2650000K=2.53G,50W长连接需要多少内存量(OS):500000*8K=3.8G

          也就是说,50W长连接的话,大约需要总占用系统10G的内存空间(当然这是保守值,也希望大家多测试测试给出更多的一些数据)



3.好了,说了这么多,看看笔者的一些测试数据吧(笔者只是把几个月前的测试邮件内容发出,因为某些原因笔者不能发出现在公司正在使用的完全代码实现)

    1)如果要支持这么多的长连接,一定要修改一下系统的一些内核参数,如下:

 

C代码   收藏代码
  1. <span>vi /etc/sysctl.conf  
  2.    
  3.    
  4. net.ipv4.tcp_max_syn_backlog = 65536  
  5.    
  6. net.core.netdev_max_backlog =  32768  
  7.    
  8. net.core.somaxconn = 32768  
  9.    
  10.    
  11. net.core.wmem_default = 8388608  
  12.    
  13. net.core.rmem_default = 8388608  
  14.    
  15. net.core.rmem_max = 16777216  
  16.    
  17. net.core.wmem_max = 16777216  
  18.    
  19.    
  20. net.ipv4.tcp_timestamps = 0  
  21.    
  22. net.ipv4.tcp_synack_retries = 2  
  23.    
  24. net.ipv4.tcp_syn_retries = 2  
  25.    
  26.    
  27. net.ipv4.tcp_tw_recycle = 1  
  28.    
  29. #net.ipv4.tcp_tw_len = 1  
  30.    
  31. net.ipv4.tcp_tw_reuse = 1  
  32.    
  33.    
  34. net.ipv4.tcp_mem = 94500000 915000000 927000000  
  35.    
  36. net.ipv4.tcp_max_orphans = 3276800  
  37.    
  38.    
  39. #net.ipv4.tcp_fin_timeout = 30  
  40.    
  41. #net.ipv4.tcp_keepalive_time = 120  
  42.    
  43. net.ipv4.ip_local_port_range = 1024  65535  
  44.    
  45.    
  46. /sbin/sysctl -p  
  47.    
  48. 最后个命令是让配置生效的。  
  49.    
  50.    
  51. vi /etc/security/limits.conf  
  52.    
  53. 添加  
  54.    
  55. *                -       nofile          1006154</span>  

 

    注:a.因为移动终端经常会因为网络问题断开,所以要修改内核参数支持连接断开后快速回收

            b.OS虽然默认TCP的缓冲内存已经足够大,但是因为系统要支持很多的长连接,所以缓冲内存还需要调整,要不然会发生丢包情况(这个也是笔者当时和58同城的资深VP聊天的时候了解并学习到的)

            c.文件句柄数要加大,因为OS默认支持的长连接数量比较小

 

    2)下面是测试的邮件正文

    写道

1. 有消息收发之间的间隔,比如说。Client --> Server端发消息。
如果Server端默认1分钟没有收到消息(包括心跳),则断开连接,可配间隔时间。
同理,如果Client端没有Server推过来的消息(包括心跳),则断开连接,可配间隔时间。

当然,如果没有消息,心跳包也是可以Client <--> Server互发的。如果没有消息,心跳就会互发,为了保证长连接不断。如果要是在接收方没有消息过来,则认为连接断了。之前设计这个的时候,就是考虑到了手机端的长连接的各种应用场景。

2. 每个登录用户没有用户session,不过有这个接口,可以每个连接可以添加一个attchment,可以跟据连接绑定信息。
测试的时候没有给attchment加信息。
其实真的不是为了代替他的方案,当时设计的时候就是为了RPC和手机服务端长连接设计的。
用户session信息比较占用内存,我是建议用户session信息放在堆外,这样不影响JVM。

3. 现在内存表现是用的CMS回收策略,所以没有出现full gc回收停顿的情况。但是因为netty的长连接本身就占了5K,而且我们这边又加了一些扩展信息,所以现在一个连接占了5.3K。

4. 为什么说现在超过50W了,是因为现在内存上限设成6G了,然后又进行了50W以上的长连接和每秒60000以上的消息发送(Hello Word)。
年轻代和老年代回收的时间都在0.4秒左右,所以对应用没有影响才敢说50W长连接了。
(注:年轻代回收,其实整个应用会停的,老年代的 full gc也是整个应用会停的;不过gc.log我看了,在0.4秒左右,所以没有影响应用)
(其实理论上还可以加内存,不过没有经过压力测试也没有时间弄了,没有测试机测试一回太累了,不过至少保证50W长连接没有啥问题)
(我估计也差不多了是上限了,应用内存回收已经占了0.4秒了,再加大如果回收时间占有的太长也不好)

5. 之前为什么说加到6G测试后,不行。是因为我发现jvm的年轻代不能开太大,好像年轻代开的太大会影响整个应用的停顿时间。所以这次是把年轻代保持不变,heap推放大到6G,所就是说多出来的2G空间给老年代了。而长连接正好在老年代保存,所以新加的2G给长连接正好把长连接推到了50W长连接。而且还有1G以上的空闲空间,而且老年代的full gc也控制在了0.4秒,我感觉比例正好。

 

 

下面是测试数据:

1.  同时在线人数 : 508691

2. JVM 参数配置:

 

3.  资源使用情况:

 

 

5.  每秒消息数:60000msg/s

6. gc.log 信息如下:

 

ParNew :是新生代的回收时间,会让整个应用停止,real 是真实的应用停止时间:0.4x

GC[YG occupancy] 这一段是老年代full gc :会让整个应用停止,real 是真实时间,0.42

因为gc 新年代和老年代收回不频繁,所以对应用没有影响。内存我也其实也不想再加了,在60000 个消息并发和50W 心跳包的情况下能做到这个效果,我感觉不错了。

刚才问了手机QQ 的长连接,这前他们是15~20W 长连接一台,现在新的架构也就能做35~40W ,我感觉现在应该行了。

 

该长连接测试用例,笔者是用summercool-hsf开源框架(笔者的另一个开源的RPC框架)的基础上实现的。笔者正在用grizzly实现另一个手机终端长连接版本,因为grizzly更加节省内存,能支持更多的长连接数量,虽然性能可能不会达到netty,但是对不是高压力该问,但是对长连接数量有非常高要求的应用,grizzly还是非常适合的。笔者因为时间的关系,不再列出grizzly的详细测试数据,后面的章节会继续给出,请大家关注。

 

summercool-hsf框架地址(已经在某些公司的大型应用成熟使用1年时间):http://code.google.com/p/summercool-hsf/


原文

http://dragonsoar.iteye.com/blog/1567771


移动互联网SIP在线状态方案分析 经过近10年的发展,SIP己发展成做音视频通信的首选标准协议。如今在移动互联网背景下,SIP得到广泛应用的同时也面临诸多挑战,我们今天要聊的在线状态就是其中之一。SIP是一个非常灵活的协议,可应用于音视频、IM等场景,基于其高扩展性,实际可用于任何数据的通信协商。在其主要应用场景音视频通信中,为保证用户体验,在线状态的准确显得尤为重要。         SIP协议在定义之初,主要是基于UDP 阅读详情

相关推荐

Java的socket长连接实例

自己写的Java的socket长连接实例 已测试

android长连接的所有方式及分析

文章目录实现长连接的方式方案优缺点比较push原理及实现主流app常用方案:1. 使用第三方的长连接服务2. 使用NIO等方案实现长连接服务3. 使用MINA等第三方框架实现长连接4.websocket实现及才坑记录 实现长连接的方式 http发送心跳包轮训的方式 xmpp websocket 方案优缺点比较 选择用http,这种实现方式是通过轮询来实现的,或者算是心跳包,不过也会影响一定...

MR CUI的专栏 1万+

socket 长连接实例

NULL 博文链接:https://hoochiang.iteye.com/blog/2148092

几种常见的长连接实现方案

在业务系统设计方案中,长连接是一个比较有挑战的一块,长连接会有很多优势,但要怎么选择长连接技术方案呢?

nanxijms的博客 8768

SceneSplat

目标:训练一个网络,输入高斯参数 → 输出与自然语言空间对齐的特征。考虑到标注语义的 3DGS 数据有限,作者设计了。策略,让模型在无标签场景上学到有用表征。都有一个与自然语言对齐的语义特征。这是整个方法的第一步,目标是让。

weixin_61091146的博客 1284

脑机接口(BCI)从原理到开发实战 10|脑控外设:用脑电波控制机械臂/游戏

摘要: 脑机接口(BCI)的“最后一公里”是将分类结果转化为实际动作的关键环节。本文介绍如何通过指令映射、硬件通信和执行反馈实现脑控外设,包括离散/连续控制策略、防抖处理及串口/蓝牙通信方法。通过两个实战案例(运动想象控制机械臂抓取、P300/SSVEP控制游戏)和完整项目(OpenBCI控制小车),演示了从分类标签到设备动作的完整流程,重点涵盖指令生成算法(多数投票)、Python与Arduino的串口通信集成,为BCI系统落地提供实用解决方案。(149字)

小明的博客 765

移动端长连接

1、什么是长连接先说短连接, 短连接是通讯双方有数据交互时就建立一个TCP连接, 数据发送完成后,则断开此连接(建立连接需三次握手,断开连接需四次挥手)。长连接就是大家建立TCP连接之后, 不主动断开。 双方互相发送数据, 发完了也不主动断开连接, 之后有需要发送的数据就继续通过这个连接发送。TCP连接在默认的情况下就是所谓的长连接, 也就是说连接双方都不主动关闭连接, 这个连接就应该一直存在。2、

bjxiaxueliang的CODING小栈 2549

(C#脚本)Unity中角色移动的几种实现方法,以及心得。(适合新手入门)

PS:首先我们要知道,在C#中Transform组件是可以直接调用的,而其他的(例如:Rigidbody,Animator)都需要通过 GetConpoment<组件的名称>(); 来获取进行实例化。 例子:调用Rigidbody2D private Rigidbody2D rb2D;//声明变量实例化 void Start() { rb2d = GetComponent<Rigidbody2D>();//获取 } 1.对Unity脚本写入有一定的思维了解...

qq_48860282的博客 1万+

客户端与服务端长连接的几种方式

在日常 Web 项目中,通常使用的是短连接。即一个 Request 对应一个 Response,发起请求后建立TCP 连接,数据传输后连接关闭。但是对于股票信息更新、即时通讯、在线游戏这种数据交互频繁的场景就需要使用长连接。今天记录一下长连接的几种方式。

杏子 1万+

AI 小说生成器本地部署完全指南

这篇文章介绍了本地部署AI小说生成器的完整指南,主要面向网文作者、内容创作者和AI爱好者。文章从环境搭建到创作实践,详细讲解了三种主流部署方案:Ollama(推荐新手)、LMStudio(图形界面)和text-generation-webui(高级定制)。内容涵盖硬件需求、系统架构、模型选择、API对接、提示词工程等关键技术环节,并提供了小说创作的特制提示词模板和参数调优建议。文章还讨论了长篇小说管理、多模型协作等进阶技巧,以及版权伦理等法律问题。最后推荐了相关工具资源和社区论坛,帮助读者实现安全、高效、可

珂珂可爱多 2261

[Dify] -进阶13- 使用“知识库 + 工作流”打造智能推荐系统

本文介绍了在Dify平台上构建智能推荐系统的方法,重点阐述了知识库与工作流技术的结合应用。通过知识库管理RAG流程,实现文档上传、向量嵌入和检索优化;利用工作流设计节点化推荐逻辑,支持并行处理与条件分支。以电话销售话术推荐为例,展示了从数据收集到实时生成的完整流程。该方法具有准确性高、扩展性强、维护简便等优势,可广泛应用于各类推荐场景,实现从数据存储到智能推荐的闭环解决方案。

技术小甜甜:传播可落地技术,帮助个人和企业降低解决真实场景问题的成本 1067

移动互联网长连接

移动互联网应用现状 因为手机平台本身、电量、网络流量的限制,移动互联网应用在设计上跟传统 PC 上的应用很大不一样,需要根据手机本身的特点,尽量的节省电量和流量,同时又要尽可能的保证数据能及时到达客户端。 为了解决数据同步的问题,在手机平台上,常用的方法有2种。一种是定时去服务器上查询数据,也叫Polling,还有一种手机跟服务器之间维护一个 TCP 长连接,当服务器有数据时,实时推送到客户端

kobejayandy的专栏 979

lammps案例:聚乙烯和石墨烯界面pull out模拟

大家好,我是小马老师。 本文介绍lammps模拟计算界面结合力的一个案例。 本案例参考论文《The interfacial mechanical properties of functionalized graphene- polymer nanocomposites》,对论文作者表示感谢。 模型共分2层,上层为聚乙烯模型,下次为单层石墨烯,模拟过程共分3部分:建模、弛豫、拉伸。 (1)建模 使用MS建立聚乙烯和石墨烯模型,具体方法可参考之前的推文,使用build layer方法建立聚乙烯和石墨烯组合模型,

lammps_jiayou的博客 3495

互联网推送长连接心跳机制

互联网推送原理: 长连接+心跳机制 互联网推送消息的方式很常见,特别是移动互联网上,手机每天都能收到好多推送消息,经 过研究发现,这些推送服务的原理都是维护一个长连接(要不不可能达到实时效果),但普通的socket连接对服务器的消耗太大了,所以才会出现像MQTT 这种轻量级低消耗的协议来维护长连接,那么要如何维护长连接呢: 我们首先了解一下为什么android维护长连接需要...

技无涯的博客 591

mjlab & MimicKit 宇树 G1 人形机器人强化学习训练部署

基于mjlab框架训练Unitree G1人形机器人执行双旋踢的示例。参考动作源自Jason Peng的MimicKit项目。数据转换脚本(MimicKit pkl → mjlab csv)完整训练结果与超参数预训练ONNX检查点用于部署实体硬件部署指南⚠️ 免责声明仅用于教育目的。对于因尝试复现此处展示结果而导致的财产损失或人身伤害,我们概不负责。操作硬件时请谨慎行事并保持良好判断力。

2506_90492529的博客 1700

外部PLC触发VisionMaster多流程运行

上一讲,介绍了海康VisionMaster与西门子PLC1200进行S7通信。在前一讲的基础上,讲解如何通过PLC触发,实现VisionMaster的多流程运行。

haier123888的博客 4653

移动互联网的应用

一、移动互联网的应用领域 (1)移动互联网金融是传统金融行业与移动互联网相结合的新兴领域。 (2)包括但不限于、移动支付、线上金融理财、金融中介、金融评价、金融电子商务等模式、信用评级审核等。 (3)发展现状:用户的快速增长、品种不断完善、交易成本降低 (4)特点:操作方便、全民理财、金融风险上升、消费模式变化等。 二、移动互联网在电子政务的应用 (1)移动政务(Mobile Government, 简称 mGov),又称移动电子政务,主要是指移动技术在政府工作中的应用,通过诸如手机、

记录并分享学习安全的知识点.. 1万+

ssm框架搭建

这个是一个在idea上成功跑起来的ssm框架项目,保存在这里方便以后使用直接下载

第1讲 移动互联网概述

一、移动互联网的定义 移动互联网 通过无线接入设备访问互联网,能实现移动终端之间的数据交换 移动互联网 是计算机领域继大型机、小型机、个人电脑、桌面互联网之后的第五个技术发展阶段 移动互联网 是未来网络发展的核心和最重要的趋势之一 百度百科定义   移动互联网(MI)是一种通过移动智能终端,采用移动无线通信方式获取业务和服务的新型业态,...

weixin_30807677的博客 3560

精雕软件(JDpaint) 5.5 绿色版

精雕软件(JDpaint) 5.5 绿色版精雕软件(JDpaint) 5.5 绿色版精雕软件(JDpaint) 5.5 绿色版

IMSL CNL 7.0.0 (x86-64)Crack

IMSL CNL 7.0.0 (x86-64)Crack intel的算法库破解文件,这是C++版本的破解文件

mqtt如何发送心跳 安卓_移动互联网消息推送原理:长连接+心跳机制(MQTT协议)

互联网推送消息的方式很常见,特别是移动互联网上,手机每天都能收到好多推送消息,经过研究发现,这些推送服务的原理都是维护一个长连接(要不不可能达到实时效果),但普通的socket连接对服务器的消耗太大了,所以才会出现像MQTT这种轻量级低消耗的协议来维护长连接,那么要如何维护长连接呢:在写之前,我们首先了解一下为什么Android维护长连接需要心跳机制,首先我们知道,维护任何一个长连接都需要心跳机制...

weixin_39638305的博客 394

复分析 阿尔福斯(Ahlfors) 第三版答案 英文

答案分为十章,有部分习题没有答案,全英文复分析阿尔福斯(Ahlfors) 第三版答案

极光推送技术原理:移动无线网络长连接

移动互联网应用现状   因为手机平台本身、电量、网络流量的限制,移动互联网应用在设计上跟传统 PC 上的应用很大不一样,需要根据手机本身的特点,尽量的节省电量和流量,同时又要尽可能的保证数据能及时到达客户端。   为了解决数据同步的问题,在手机平台上,常用的方法有2种。一种是定时去服务器上查询数据,也叫Polling,还有一种手机跟服务器之间维护一个 TCP 长连接,当服务器有数据时,实时推送

极光推送的专栏 2162

移动互联网

百科名片    移动互联网的目标 移动互联网,就是将移动通信和互联网二者结合起来,成为一体。在最近几年里,移动通信和互联网成为当今世界发展最快、市场潜力最大、前景最诱人的两大业务,它们的增长速度都是任何预测家未曾预料到的,所以移动互联网可以预见将会创造怎样的经济神话。 目录 前言中国移动互联网发展历程 播种 萌芽 洗礼 争论焦点 移动互联

shengjinfang的专栏 1万+
上一篇: Calling a web-service from a Unity3D scene
下一篇: Unity3D研究院之C#使用Socket与HTTP连接服务器传输数据包
ppby2002
博客等级 码龄23年 65粉丝 104原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值