socket通讯的单机瓶颈

物联网的项目socket使用方式有两种:

  1. 短连接的socket请求
  2. 维持socket长连接的请求

对于socket短链接来说就好比是http请求,请求服务器,服务器返回数据以后请求管道就关闭了,服务器与客户端的链接就释放了。但是对于socket长链接就不同了,当设备与服务器建立连接以后就要一直保持连接,或者说保持较长时间的链接,那么就会大量消耗服务器的资源。若存在大量的这样的请求以后服务器终究会受不了垮掉。通过对TcpClient/server最大连接数我们得知单机socket服务是存在最大链接数限制。尽管理论值很大,但还要考虑到实际服务器的内存/cpu/带宽等条件,我们不可能指望单机承载特别大的链接请求。

该如何负载均衡socket长连接的请求

提到负载均衡大家可能会想到很多负载均衡的框架,比如说比较出名的:nginx。但是悲催的是他是基于转发的方式,不能应用在socket长链接请求上。在这一块目前还没有特别优秀的处理框架,而且从技术角度来分析也不可能存在。那我们只能自己想办法了。

socket分发服务架构图

1、 设备请求分发服务器,分发服务器返回有效的socket服务器ip与port,然后断开连接。
a) 设备与服务器建立连接。
b) 服务器接收到连接请求后,立即将分配好的socket服务器ip与port信息响应给设备。
c) 服务器主动断开socket连接。
2、 设备得到ip与port以后,设备去连接socket服务器,然后与其进行协议通讯。
a) 设备连接到socket服务器。
b) socket服务器响应连接成功响应信息。
c) 设备与socket服务器保持长链接通讯。

*. 若设备未收到连接成功响应则再次尝试连接,若三次请求依旧没有成功建立连接,那么设备需要去请求分发服务器然后再重新上述操作。
*. 当设备在异常情况下链接不上socket服务器时,依旧尝试三次若不能成功,则直接请求分发服务器,然后再重复上述操作。

分发服务器处理业务

我们来看一下分发服务器该处理的业务:

@Overridepublic void channelActive(ChannelHandlerContext ctx) throws Exception { //todo 根据自己的负载情况获取相应的socket服务器信息 String ip = "192.168.1.188:2030"; SocketUtils.send(ctx,ip.getBytes()); ctx.close(); } 

*. ip的获取需要根据自己的业务来完成。

总结

我们通过这样的方式就可以轻松的解决大量设备与服务器通讯的问题,若后面有更多的设备请求只需添加更多的socket服务器即可。当然可能大家担心分发服务器受不了,其实这是多余的,因为分发服务器只做转发,而且完成处理以后就直接把链接给释放,并且当设备拿到socket服务器的ip地址以后就将不在访问分发服务器了,它的压力是可控的不会特别也不会频繁。

转自:https://my.oschina.net/oswl/blog/967828?from=singlemessage&isappinstalled=0

转载于:https://www.cnblogs.com/panchanggui/p/10342001.html

基于netty框架的socket长连接负载均衡解决方案相关推荐

  1. socket 获取回传信息_基于netty框架的socket长连接负载均衡解决方案 oswl

    前言 物联网如今是一个大的趋势,但是概念还比较新颖.大家对这一块的技术积累也比较匮乏,借此前段时间摩拜单车出现了大规模瘫痪的现象.我们今天来讨论一下物联网项目的开发方式. 关于tcp/ip 相关的知识 ...

  2. 解决k8s中的长连接负载均衡问题

    目录 长连接与短连接: 简介 使用步骤 适用场景 当k8s遇上长连接: 问题描述 解决方案 长连接与短连接: 简介 长连接是指在一个TCP连接上可以连续发送多个数据包,在TCP连接保持期间,如果没有数 ...

  3. 安卓中socket长连接和websocket长连接的实现

    现在一款成熟的app一般都会具备长连接推送功能,那么我们要想项目具备长连接的功能现在又两种选择的方案,一种基于原生tcp协议的socket长连接,另外一种基于ws协议的websocket的长连接,今天 ...

  4. 网络编程懒人入门(八):手把手教你写基于TCP的Socket长连接

    转自即时通讯网:http://www.52im.net/ 本文原作者:"水晶虾饺",原文由"玉刚说"写作平台提供写作赞助,原文版权归"玉刚说" ...

  5. java nio socket长连接_netty学习实战—实现websocket长连接和socket之间进程通信

    netty学习-实现websocket长连接和socket之间通信 最近正在学习netty,跟着教程写了一个基于WebSocket的网页聊天室,对netty有了一定的了解,现在正好项目使用到长连接,选 ...

  6. 游戏网络Socket长连接管理

    对于网络游戏来说,网络连接的开发与维护是非常重要的,这里主要说明一下最常用的socket长连接开发与管理.服务端使用的网络框架是Netty,客户端使用的是unity,本文中的源码,可以在这里查看:ht ...

  7. android socket 长连接_php socket如何实现长连接

    长连接是什么? 朋友们应该都见过很多在线聊天工具和网页在线聊天的工具.学校内有一种熟悉的功能,如果有人回复你了,网站会马上出现提示,此时你并没有刷新页面:Gmail也有此功能,如果邮箱里收到了新的邮件 ...

  8. socket 长链接linux,手把手教你写 Socket 长连接

    原标题:手把手教你写 Socket 长连接 8点43分打卡 就是真爱 本文转载自公众号 玉刚说,由玉刚说写作平台[1]提供写作赞助 原作者:水晶虾饺[2] 版权声明:本文版权归微信公众号玉刚说所有,未 ...

  9. 手把手教你写 Socket 长连接

    本文由玉刚说写作平台[1]提供写作赞助 原作者:水晶虾饺[2] 版权声明:本文版权归微信公众号 玉刚说 所有,未经许可,不得以任何形式转载 本篇我们先简单了解一下 TCP/IP,然后通过实现一个 ec ...

最新文章

  1. 一句SQL实现获取自增列操作
  2. Kubernetes中的nodePort,targetPort,port的区别和意义
  3. 【STM32】RTC程序示例
  4. c语言实现灰度图像阈值分割,灰度图像--图像分割 阈值处理之平均阈值
  5. linux django 指定端口,linux部署django项目流程(全)
  6. kafka实现组内广播
  7. vue 拷贝 数组_vue源码中值得学习的方法
  8. Ubuntu 下 matplotlib 中文乱码
  9. android gms包
  10. 海康威视错误代码0xf_海康威视网络摄像机客户端 实例源码(基于SDK)
  11. Detecting Causality in Complex Ecosystems(检测复杂生态系统中的因果关系附件)
  12. oracle中栓锁,特定的闩锁和互斥场景
  13. Linux中常用的文件目录,Linux学习笔记2——Linux中常用文件目录操作命令
  14. iOS开发实用技术之音频播放(QQ音乐)
  15. springboot+poi开发excel导出 加载Excel模板导出 Excel批量导出详解
  16. mysql联合索引的使用规则
  17. mysql视图view 自增id_MySQL学习笔记之MySQL视图(view)
  18. 爱情日记(2005年3月)
  19. 奇点临近-人工智能的时代已经来了
  20. 为单身狗推荐一个相亲公众号,靠谱!真实

热门文章

  1. msf 生成php马_PHP的性能优化方法总结
  2. 第一章节 ASP.NET Web应用程序基础(一)
  3. LC3无重复最长字串
  4. Counting 4-Cliques
  5. 生产者和消费者问题变形
  6. new与malloc的不同
  7. 2017ICPC北京 J:Pangu and Stones(区间DP)
  8. bzoj 1624: [Usaco2008 Open] Clear And Present Danger 寻宝之路(floyd)
  9. 吴恩达神经网络和深度学习-学习笔记-32-卷积神经网络示例
  10. kubernetes之kubedns部署(kubedns,dnsmasq,exechealthz)以及dns-autoscaler部署