服务器主动连接8000多客户,请问服务器connect最大连接数多少?

booming 2011-10-24 10:52:09
我一个服务器要主动去连接8000多的客户,客户都在监听。请问,服务器发出connect最大连接数多少?这样是不是不好?
...全文
777 33 打赏 收藏 转发到动态 举报
AI 作业
写回复
用AI写文章
33 条回复
切换为时间正序
请发表友善的回复…
发表回复
kevinaniu 2011-12-30
  • 打赏
  • 举报
回复
”我一个服务器要主动去连接8000多的客户,客户都在监听。“

用IOCP呗。既然客户都在监听,说明此时的客户是服务器端,服务器主动连,说明服务器是客户端。用IOCP模拟客户端主动连接8000多客户理论上问题不大。不过数据处理一定要高效。
qman007 2011-12-30
  • 打赏
  • 举报
回复
Windows下最多4K
Linux:
select/poll 方式 4K
epoll 方式 不定,但远大于4K,最多能达到几万个
fishion 2011-12-19
  • 打赏
  • 举报
回复
没看清楚,一个套节字可能可以连接多个客户端的,没这样使用过
fishion 2011-12-19
  • 打赏
  • 举报
回复
如果是你主动连接的,那就说明你每个连接都需要分配一个唯一的端口了,端口的范围是0~65535,除了一些被使用的,你可以看到你还能用多少个端口
saiyaman5 2011-12-19
  • 打赏
  • 举报
回复
这种做法的好处就是,自己的服务器不用开放,坏处就是自己的服务器负担会加重.
zhouzhipen 2011-12-09
  • 打赏
  • 举报
回复
[Quote=引用 10 楼 booming 的回复:]

我做的军方级的安全。一切反其道行之。
[/Quote]

没话说,你去安全吧
wanglovec 2011-12-09
  • 打赏
  • 举报
回复
反过来就好了, 只要你的硬件厉害 没什么问题
woxuevc2011 2011-12-09
  • 打赏
  • 举报
回复
[Quote=引用 19 楼 hztj2005 的回复:]
一个端口是可以连接多个用户的。

没做过网络编程,请教如何区分数据来自不同的用户?
[/Quote]

用户的ip地址+端口就可以区分撒!
「已注销」 2011-12-09
  • 打赏
  • 举报
回复
[Quote=引用 24 楼 booming 的回复:]

没办法。美军的用法就是如此。
[/Quote]

你错了,那是CIA的做法,美军的做法是利用因特网上现有的连接,秘密传送数据。
booming 2011-12-08
  • 打赏
  • 举报
回复
再说8000个客户,要求每一台都能connect成功,那网络很难设置,除非不要安全了。
-----------
为何不安全?且难配置?
客户开个端口有啥不安全和难配置的?
booming 2011-12-08
  • 打赏
  • 举报
回复
没办法。美军的用法就是如此。
sxcong 2011-11-03
  • 打赏
  • 举报
回复
windows下不修改配置,最多的连接数是3千多个
服务器连客户端肯定不好,为什么不让客户端连服务器。
再说8000个客户,要求每一台都能connect成功,那网络很难设置,除非不要安全了。
sevancheng 2011-11-03
  • 打赏
  • 举报
回复
只能说是及其sb的做法,服务端就服务端,还做什么客户端
连8000个你要用掉8000个端口,你连上了之后怎么准换为服务端的角色呢?
teleinfor 2011-11-02
  • 打赏
  • 举报
回复
[Quote=引用 10 楼 booming 的回复:]

我做的军方级的安全。一切反其道行之。
[/Quote]
xiayadong 2011-11-02
  • 打赏
  • 举报
回复
[Quote=引用 13 楼 xuddk727 的回复:]
服务器的的最大连接速度受很多影响,并不是简单判断的出得。
首先是上行流量,其次是数据计算量,资源占用率等等,这些综合起来才能算是考虑的比较完全的最大连接数。
[/Quote]


对,主要看你系统的资源,以及采用何种网络模型
binarie 2011-11-02
  • 打赏
  • 举报
回复
从系统资源上看,在文件描述符或句柄没有限制的情况下,最多也就对外发出65535个TCP连接吧?毕竟每个都要占用一个临时端口。
如果你在windows系统里,默认的临时端口范围只能是1024-5000,那更坑爹。
xiaoshu163000 2011-11-02
  • 打赏
  • 举报
回复
可以参考一下select模型,每来一个客户端,就把他的socket放进一个FD_READ里面,然后循环查询是否存在可读,区别数据是根据客户端发送时自带的socket来区别的[Quote=引用 19 楼 hztj2005 的回复:]
一个端口是可以连接多个用户的。

没做过网络编程,请教如何区分数据来自不同的用户?
[/Quote]
hztj2005 2011-11-02
  • 打赏
  • 举报
回复
一个端口是可以连接多个用户的。

没做过网络编程,请教如何区分数据来自不同的用户?

Ronald_Z 2011-11-01
  • 打赏
  • 举报
回复
参考一下:
socket + threads/threadpool
大概性能:小于1500个连接
实现:accept一个socket,就交给一个线程去管理,比较笨,但也比较有效,因为是同步方式,控制起来很方便。高级点的,就是交给一个线程池去管理,线程池由系统自动托管,省去了开销线程的时间。一般小型项目,用这个完全足够,开发也简单。但要注意,如果若干socket长时间占用线程池中的线程,同时其它连接数又比较多,很容易出现提示说你没有足够的线程供使用。呵呵,让socket少做点事,少占用时间,换一个快点的cpu是不错的方式。另外,如果有一些比较好的第三方线程池组件,也可以选择使用,比如smartthreadpool。
socket + select
大概性能:大于1500个连接后性能下降
实现:select是很常用的一种模型。是在阻塞功能中轮询一个或多个socket,将要处理的socket放到一个ilist中,当select轮询结束后,然后我们再自己处理这个ilist中的socket。具体的用法可以看一下msdn。select的效率并不能说是高的,因为当队列中待处理的socket比较多的时候,处理最后几个socket相当于要遍历所有前面的socket,非常不划算的。

socket + asynchronous
大概性能:约7500个客户端连接
实现:beginxxxx,endxxxx,再熟悉不过了吧。异步socket归根到底,还是用的线程池技术,用线程池来处理异步io。这就又引出个问题,.net的线程池又是用的什么实现方式,以前看过有人说,.net的线程池是用的完成端口来实现的,我不知道这样的说法是不是正确,从查到的资料中也没有办法确认(希望这点有朋友可以告诉我)。异步socket对于程序的处理流程来说比同步复杂了许多,异步回调函数的控制不如同步方式那样直观。但有一点我想应该是要注意的,就是回调函数应该轻装上阵,不应该处理过多的事务,对传递数据的处理,应该交给其它线程进行处理。

iocp(完成端口)
大概性能:约20000~50000个客户端连接
实现:现在.net下有一些伪iocp,大家可以去搜索一下,还没有见过开放出来的用这些伪iocp来实现的socket例子。我说的20000~50000个客户端连接,是指在c++下开发的情况,这样的情况下,需要用到的基本技术还包括内存池、查询算法等。
xiaoshang_program 2011-11-01
  • 打赏
  • 举报
回复
楼上的很正确呀

这个取决于你的系统资源

一个端口可以多开

加载更多回复(13)

18,363

社区成员

发帖
与我相关
我的任务
社区描述
VC/MFC 网络编程
c++c语言开发语言 技术论坛(原bbs)
社区管理员
  • 网络编程
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧