社区
C#
帖子详情
socket编程中处理多个(上万个)客户端问题
footman2046
2010-07-27 11:18:04
近来在看socket编程,碰到一个问题就是:当客户端很多时,比如上万,十万。。。服务器该如何设计,之前是当有一个客户端连上来时就是在服务器端开一个线程来监听客户端的消息,这时问题就来了,客户端多了,服务器的压力自然会很大。请教各位有什么好的方案。
补充:我想p2p模式可以解决上面的问题,但除此之外有没有别的合理的方案呢?
...全文
584
17
打赏
收藏
socket编程中处理多个(上万个)客户端问题
近来在看socket编程,碰到一个问题就是:当客户端很多时,比如上万,十万。。。服务器该如何设计,之前是当有一个客户端连上来时就是在服务器端开一个线程来监听客户端的消息,这时问题就来了,客户端多了,服务器的压力自然会很大。请教各位有什么好的方案。 补充:我想p2p模式可以解决上面的问题,但除此之外有没有别的合理的方案呢?
复制链接
扫一扫
分享
转发到动态
举报
写回复
配置赞助广告
用AI写文章
17 条
回复
切换为时间正序
请发表友善的回复…
发表回复
打赏红包
萨拉嘿
2010-07-28
打赏
举报
回复
http://blog.csdn.net/sodme/archive/2005/06/12/393165.aspx
http://www.cppblog.com/jack-wang/archive/2009/03/05/70962.html#75575
参考。。主要还是功能的划分
绿色夹克衫
2010-07-28
打赏
举报
回复
如果是基于DHT的P2P网络,10万确实不算什么!
SadEmprie
2010-07-28
打赏
举报
回复
lz啊,个人意见,在这儿干说是说不出个所以然的,如果你真的想深入研究一下,不如去看看nginx的代码,这个web server的性能很好的,不过是linux下的,个人意见用C#写大型服务器不是件太靠谱的事~~ 呵呵。
footman2046
2010-07-28
打赏
举报
回复
楼上提供的资源不错,谢谢。
Neil198
2010-07-27
打赏
举报
回复
负载均衡。多弄几台服务器
chichenzhe
2010-07-27
打赏
举报
回复
[Quote=引用 11 楼 footman2046 的回复:]
呵呵,怎么就没看懂我的意思呢,我说了只用一台pc吗?可以有多台,但不想完全靠服务器去抗。我是想请教一些具体点优化的方案,但凡有点逻辑的人都会想到通过添加服务器数目来负担负载...,我觉得思维,模式是非常重要的....
[/Quote]
做分布式 的网络应用更复杂,更需要功底.相关技术上不比1台实现起来简单.但压力负载却会改善很多.
我给你转的贴是一个相对来说 只需要网络编程够功底的 解决方案.
当然了,对于上万级的应用,我只能给你提提招,细节思路也帮不到你.因为我只做过上千的.
footman2046
2010-07-27
打赏
举报
回复
呵呵,怎么就没看懂我的意思呢,我说了只用一台pc吗?可以有多台,但不想完全靠服务器去抗。我是想请教一些具体点优化的方案,但凡有点逻辑的人都会想到通过添加服务器数目来负担负载...,我觉得思维,模式是非常重要的....
chichenzhe
2010-07-27
打赏
举报
回复
你自己计算好了
10W个TCP连接
默认每个TCP连接的不可分片缓冲内存大约是4KB这样 SEND和RECV都有,那么是8KB左右
其次,这种规模的TCP连接,根本不能考虑使用消息的IOCP或者EPOLL之类的
光消息发送也会吃掉太多的系统资源,包括投递的内存等操作太消耗资源
IOCP和EPOLL为的是提高网络响应效率,而不是说为了能够更多的连接,这一点大部分人都没吃透!!
只能用基本的SOCKET
使用定时 SELECT轮巡来实现
注意,系统不可分片内存不同WINDOWS有不同设置,都比较有限,很多系统调用都需要使用这个
当这个内存开销完,新的连接就无法实现了
测试必须在WINDOWS SERVER下进行,非SERVER系统对系统资源的调度和SOCKET分配有一个较大限制
10W个,在64位下没什么问题的,系统是根绝本机IP和端口与对方的IP和端口来确定一 TCP连接
理论上这个数字是无限
在WIN 2003下,极限大约是25W个连接
---------------------------------------
http://topic.csdn.net/u/20100720/18/da25b289-907b-452b-b4f4-006232ac3543.html?42806
上面是有人解决的方案.
不过需要的功底还是比较深的,还需要一台64位的PC SERVER
祝你好运.
chichenzhe
2010-07-27
打赏
举报
回复
一台PC的可用端口只有65535个.....
10万....你丫的...
特别
2010-07-27
打赏
举报
回复
[Quote=引用 5 楼 footman2046 的回复:]
不是只用1台服务器,可以有多台,但我不想用增加服务器来解决问题。10万个用户在线很正常的事,腾讯不是有1个亿的用户同时在线吗(这只是QQ,还是没说的应用)。我有一个想法,就是用1个线程来监听server打开的端口,当客户端有数据过来,server端拿到后,将数据发给另外一个线程来处理,这样的线程可以有多个(几百个一般pc还是抗的住的),这样就避免了有多少个客户端,服务器端就至少有多少个线程来处理……
[/Quote]
腾讯要是只用一台服务器能实现1亿用户同时在线的话,啥也不卖了,只要卖这技术就发了
wangyue4
2010-07-27
打赏
举报
回复
腾讯肯定是有服务器群的。只有一台服务器不太现实。lz用的是tcp吧。只要有socket连进服务器就开线程去处理。这个做法同时几百个线程是可以的。10万个的话不太现实。
nyq1999
2010-07-27
打赏
举报
回复
这么多用户只能服务器去扛,凭数量扛,不是质量。这时cache很重要
footman2046
2010-07-27
打赏
举报
回复
不是只用1台服务器,可以有多台,但我不想用增加服务器来解决问题。10万个用户在线很正常的事,腾讯不是有1个亿的用户同时在线吗(这只是QQ,还是没说的应用)。我有一个想法,就是用1个线程来监听server打开的端口,当客户端有数据过来,server端拿到后,将数据发给另外一个线程来处理,这样的线程可以有多个(几百个一般pc还是抗的住的),这样就避免了有多少个客户端,服务器端就至少有多少个线程来处理客户端请求。 初学者,各位见笑了哈。
mjp1234airen4385
2010-07-27
打赏
举报
回复
用1个服务器,同时承受10万用户,没有搞错。
你问问专业的设计人员,什么样的硬件配置才能达到你的要求。
同时10万用户在线传送数据,小型机都抗不住,
你要服务器抗??
你有10万用户同时在线吗?
顶3楼的
萨拉嘿
2010-07-27
打赏
举报
回复
[Quote=引用 1 楼 neil198 的回复:]
负载均衡。多弄几台服务器
[/Quote]
功能划分,通信、逻辑处理、数据存储都划分开来,哪些是短连接哪些是长连接设计好
footman2046
2010-07-27
打赏
举报
回复
我也想过这样这样做但是感觉这是没办法的办法。。。
JAVA自学之路
在这儿之后,你可以选择向J2ME、或者Java GUI、
Socket编程
等方向努力,但是通过第一篇的办法,你可以很容易就将这方向过滤掉(永远不要忘了我们是为了就业),好吧,暂时和它们诀别,还是向着J2EE的方向前进吧。...
php socket 编程
php socket 编程 1.实验预习:tcp协议 TCP协议的创建: 创建流程:1.
客户端
主动调用connect发送SYN分节;2.服务器端必须回复一个ACK分节来确认
客户端
的SYN分节,并发送一个SYN分节给
客户端
;3.
客户端
对服务器端...
Socket编程
系列之3:Libevent高并发网络编程实战
课程简介:
Socket编程
系列初步计划:
Socket编程
系列之1: Linux-API 网络编程入门实战
Socket编程
系列之2: Windows-API 网络编程入门实战
Socket编程
系列之3: Libevent 网络编程入门...
10 Socket 编程:epoll 为什么用红黑树?
总结一下,Socket 既是一种编程模型,或者说是一段程序,同时也是一个...在服务端有两种 Socket 文件,每个
客户端
接入之后会形成一个
客户端
的 Socket 文件,
客户端
Socket 文件的文件描述符会存入服务端 Socket 文件。
socket编程
五种模型
比较容易想到的一种服务器模型就是采用一个主线程,负责监听
客户端
的连接请求,当接收到某个
客户端
的连接请求后,创建一个专门用于和该
客户端
通信的套接字和一个辅助线程。以后该
客户端
和服务器的交互都在这个辅助...
C#
110,537
社区成员
642,576
社区内容
发帖
与我相关
我的任务
C#
.NET技术 C#
复制链接
扫一扫
分享
社区描述
.NET技术 C#
社区管理员
加入社区
获取链接或二维码
近7日
近30日
至今
加载中
查看更多榜单
社区公告
让您成为最强悍的C#开发者
试试用AI创作助手写篇文章吧
+ 用AI写文章