社区
C语言
帖子详情
海量客户端的socket服务器设计(在线等)
hb0800092
2011-08-22 10:49:48
本人现在想再一台linux服务器上用c开发一个可能会有10万 100万 或上千万并发连接的服务器,目前我只用了线程池,一旦有1000个左右的客户端连接,cpu就会飙到100% , 原因可能是平凡的线程切换造成的,不知道有没有什么方法可以在一台服务器上实现这么大并发要求
...全文
307
11
打赏
收藏
海量客户端的socket服务器设计(在线等)
本人现在想再一台linux服务器上用c开发一个可能会有10万 100万 或上千万并发连接的服务器,目前我只用了线程池,一旦有1000个左右的客户端连接,cpu就会飙到100% , 原因可能是平凡的线程切换造成的,不知道有没有什么方法可以在一台服务器上实现这么大并发要求
复制链接
扫一扫
分享
转发到动态
举报
写回复
配置赞助广告
用AI写文章
11 条
回复
切换为时间正序
请发表友善的回复…
发表回复
打赏红包
乔巴好萌
2011-08-22
打赏
举报
回复
不好意思 看错了
你那个是1000个线程了
前面也说了 不是强并发 就不要用线程模型了
乔巴好萌
2011-08-22
打赏
举报
回复
你的CPU消耗是不是别的逻辑造成的
我写的流媒体服务器 2,300个线程也没到CPU 100%
当然 服务器的性能强些
[Quote=引用 7 楼 hb0800092 的回复:]
我当然知道普通电脑不可能实现,select , poll 都试过select有连接限制,虽然可以改,但是不知道改了之后对系统有没有不良影响,同时select好像很慢,epoll还没试,虽然epoll可以解决大并发的情况,但是对cpu的消耗,不知道怎么解决
[/Quote]
jackyjkchen
2011-08-22
打赏
举报
回复
[Quote=引用 7 楼 hb0800092 的回复:]
我当然知道普通电脑不可能实现,select , poll 都试过select有连接限制,虽然可以改,但是不知道改了之后对系统有没有不良影响,同时select好像很慢,epoll还没试,虽然epoll可以解决大并发的情况,但是对cpu的消耗,不知道怎么解决
[/Quote]
别起那么多线程,并发线程太多,吞吐量不仅得不到提高,而且CPU时间都浪费在线程调度上了
jackyjkchen
2011-08-22
打赏
举报
回复
[Quote=引用 5 楼 jackyjkchen 的回复:]
当客户端太多,而服务器性能有限时,不必恪守一个客户端一个线程的教条,适当的循环,速度差别根本看不出来。
我现在在做的服务端,电信级别的,udp的接收线程只有5~10个,能应付百万级用户(当然不是同时并发)
[/Quote]
而且,我之所以分接收线程还不是为了网络,是为了多进程使用多块加密卡(瓶颈),前端有个转发器,真正对外的udp接收只有一个线程
当然,我这个是鉴权服务器,可能特点上与网站服务器不太一样
hb0800092
2011-08-22
打赏
举报
回复
我当然知道普通电脑不可能实现,select , poll 都试过select有连接限制,虽然可以改,但是不知道改了之后对系统有没有不良影响,同时select好像很慢,epoll还没试,虽然epoll可以解决大并发的情况,但是对cpu的消耗,不知道怎么解决
pathuang68
2011-08-22
打赏
举报
回复
[Quote=引用楼主 hb0800092 的回复:]
本人现在想再一台linux服务器上用c开发一个可能会有10万 100万 或上千万并发连接的服务器,目前我只用了线程池,一旦有1000个左右的客户端连接,cpu就会飙到100% , 原因可能是平凡的线程切换造成的,不知道有没有什么方法可以在一台服务器上实现这么大并发要求
[/Quote]
如果不是强并发,如果业务处理及其简单,在一台linux服务器用C开发一个并发数量是10万的服务器,或许是可能的。
但100万,上千万就不要去想了。
楼主并发数是强并发还是弱并发?强并发的话,1000就很了不起了。
单台服务器再强大,其能力都是有限的,此类问题的解决之道,可以考虑各种负载均衡的做法。
jackyjkchen
2011-08-22
打赏
举报
回复
当客户端太多,而服务器性能有限时,不必恪守一个客户端一个线程的教条,适当的循环,速度差别根本看不出来。
我现在在做的服务端,电信级别的,udp的接收线程只有5~10个,能应付百万级用户(当然不是同时并发)
iamjie
2011-08-22
打赏
举报
回复
保持合适的线程数在工作,其他的排队等待不就行了。
icansaymyabc
2011-08-22
打赏
举报
回复
如果在普通pc上写一个程序就能达到目的?那些售价上千万美元的专业服务器怎么卖得出去?
你可以上网搜搜服务器价格,那些售价几十万的服务器的内存和CPU频率和硬盘容量还比不上一台5、6千的PC机。它为啥能卖那么贵?因为人家的网卡能支持数千的并发连接。
所以你知道如何解决你的问题了吧?还不赶快凑钱去买服务器!
jackyjkchen
2011-08-22
打赏
举报
回复
单机千万并发?那就是搞笑了。
一个千万并发的网站,肯定都有个巨型的数据中心
乔巴好萌
2011-08-22
打赏
举报
回复
I/O复用啊
可以用select poll epoll什么的
epoll的理论上支持的最大连接数等同于文件描述符数 与内存大小有关
至于单台主机 不管什么样的模型 如果再加上应用层的一些处理
感觉上5万的并发就已经很厉害了
其他的要考虑集群
Web
Socket
客户端
和服务端实例源码
Web
Socket
客户端
和服务端实例源码 Web
Socket
ws实例 HTML5 用java实现的服务端 Web
socket
与
服务器
的正常通信 众所周知,Web 应用的交互过程通常是
客户端
通过浏览器发出一个请求,
服务器
端接收请求后进行处理并返回结果给
客户端
,
客户端
浏览器将信息呈现,这种机制对于信息变化不是特别频繁的应用尚可,但对于实时要求高、
海量
并发的应用来说显得捉襟见肘,尤其在当前业界移动互联网蓬勃发展的趋势下,高并发与用户实时响应是 Web 应用经常面临的问题,比如金融证券的实时信息,Web 导航应用中的地理位置获取,社交网络的实时消息推送等。 传统的请求-响应模式的 Web 开发在处理此类业务场景时,通常采用实时通讯方案,常见的是: 轮询,原理简单易懂,就是
客户端
通过一定的时间间隔以频繁请求的方式向
服务器
发送请求,来保持
客户端
和
服务器
端的数据同步。问题很明显,当
客户端
以固定频率向
服务器
端发送请求时,
服务器
端的数据可能并没有更新,带来很多无谓请求,浪费带宽,效率低下。 基于 Flash,AdobeFlash 通过自己的
Socket
实现完成数据交换,再利用 Flash 暴露出相应的接口为 JavaScript 调用,从而达到实时传输目的。此方式比轮询要高效,且因为 Flash 安装率高,应用场景比较广泛,但在移动互联网终端上 Flash 的支持并不好。IOS 系统中没有 Flash 的存在,在 Android 中虽然有 Flash 的支持,但实际的使用效果差强人意,且对移动设备的硬件配置要求较高。2012 年 Adobe 官方宣布不再支持 Android4.1+系统,宣告了 Flash 在移动终端上的死亡。 从上文可以看出,传统 Web 模式在处理高并发及实时性需求的时候,会遇到难以逾越的瓶颈,我们需要一种高效节能的双向通信机制来保证数据的实时传输。在此背景下,基于 HTML5 规范的、有 Web TCP 之称的 Web
Socket
应运而生。 早期 HTML5 并没有形成业界统一的规范,各个浏览器和应用
服务器
厂商有着各异的类似实现,如 IBM 的 MQTT,Comet 开源框架等,直到 2014 年,HTML5 在 IBM、微软、Google 等巨头的推动和协作下终于尘埃落地,正式从草案落实为实际标准规范,各个应用
服务器
及浏览器厂商逐步开始统一,在 JavaEE7 中也实现了 Web
Socket
协议,从而无论是
客户端
还是服务端的 Web
Socket
都已完备,读者可以查阅HTML5 规范,熟悉新的 HTML 协议规范及 Web
Socket
支持。
java 网络
服务器
_Java网络编程实现多
客户端
连接
服务器
使用多线程实现多
客户端
连接
服务器
,
客户端
代码如下:/***
Socket
客户端
* 功能为:发送字符串nihao到
服务器
端,并打印出
服务器
端的返回信息*/import java.io.InputStream;import java.io.OutputStream;import java.net.
Socket
;public class
Socket
Client {public static void ...
c++高并发商业级游戏
服务器
干货【
客户端
ue4和unity3d】
1、本课程是一个干货课程,主要讲解如何封装
服务器
底层,使用Tcp/ip长连接,IDE使用vs2019 c++开发以及使用c++11的一些标准,跨平台windows和linux,
服务器
性能高效,单
服务器
压力测试上万无压力,
服务器
框架是经历过上线产品的验证,框架简单明了,不熟悉底层封装的人,半个小时就能完全掌握
服务器
框架上手写业务逻辑。2、本课程是一个底层
服务器
框架教程,主要是教会学员在windows或linux下如何封装一个高效的,避免踩坑的商业级框架,
服务器
底层使用初始化即开辟内存的技术,使用内存池,
服务器
运行期间内存不会溢出,非常稳定,同时
服务器
使用自定义哈希hashContainer,在处理新的连接,新的数据,新的封包,以及解包,发包,粘包的过程,哈希容器性能非常高效,增、删、查、改永远不会随着连接人数的上升而降低性能,增、删、查、改的复杂度永远都是恒定的O(1)。3、
服务器
底层封装没有使用任何第三方网络库以及任何第三方插件,自由度非常的高,出了任何BUG,你都有办法去修改,查找问题也非常方便,在windows下使用iocp,linux下使用epoll.4、讲解c++纯
客户端
,主要用于
服务器
之间通信,也就是说你想搭建多层结构的
服务器
,
服务器
与
服务器
之间使用
socket
通信。还可以使用c++
客户端
做压力测试,开辟多线程连接
服务器
,教程提供了压力测试,学员可以自己做压力测试
服务器
性能。5、赠送ue4和unity3d通信底层框架以及多人交互demo,登录,注册,玩家离开,同步主要是教会学员
服务器
与
客户端
如何交互。6、赠送c++连接mysql数据库框架demo,登录,注册,玩家离开数据持久化.7、
服务器
教程使用自定义通信协议,同时也支持protobuf,选择权在开发者自己手里,想用什么协议都可以,自由度高。8、
服务器
教程使用手动敲代码逐句讲解的方式开展教学课程。非喜勿喷,谢谢大家。9、
服务器
教程提供源码,大家可以在平台提供的地址下载或者联系我,
服务器
使用c++11部分标准,std::thread,条件变量,线程锁,智能指针等,需要学员具备一定c++知识,购买前请慎重考虑。
epoll模型
设计
海量
级连接
服务器
原文请参考:http://blog.sina.com.cn/s/blog_659c1e660100p5hk.html 最近在参与一个
海量
级(20000以上)远程连接的
服务器
设计
,由于用户要求的硬件平台仅限于Linux,因此选择了epoll模型来实现对
海量
客户端
连接的处理。 先聊一下epoll模型的基本情况。(一般来说,非
海量
级
客户端
连接的
服务器
,可能用不到epoll模型。一方面是
服务端向
客户端
主动发送消息
通常情况下,无论是web浏览器还是移动app,我们与
服务器
之间的交互都是主动的,
客户端
向
服务器
端发出请求,然后
服务器
端返回数据给
客户端
,
客户端
浏览器再将信息呈现,
客户端
与服务端对应的模式是:
客户端
请求--服务端响应,这种机制对于信息变化不是特别频繁的应用尚可,但对于实时要求高、
海量
并发的应用来说显得捉襟见肘,尤其在当前业界移动互联网蓬勃发展的趋势下,高并发与用户实时响应是 Web 应用经常面临的...
C语言
69,369
社区成员
243,082
社区内容
发帖
与我相关
我的任务
C语言
C语言相关问题讨论
复制链接
扫一扫
分享
社区描述
C语言相关问题讨论
社区管理员
加入社区
获取链接或二维码
近7日
近30日
至今
加载中
查看更多榜单
社区公告
暂无公告
试试用AI创作助手写篇文章吧
+ 用AI写文章