tcp服务器连接数多少合适

burningbloodgg 2012-11-12 08:22:48
如果有一万个客户端,但是发送频率大概只是每分钟一次(每次也不耗时),一个服务器撑得住吗。而且每个线程也要占用一定量内存,不知道内存要不要考虑?
...全文
3830 15 打赏 收藏 转发到动态 举报
写回复
用AI写文章
15 条回复
切换为时间正序
请发表友善的回复…
发表回复
billwater 2012-11-30
  • 打赏
  • 举报
回复
用UDP,自己加检验应答。
burningbloodgg 2012-11-13
  • 打赏
  • 举报
回复
引用 11 楼 zhanshen2891 的回复:
连接数和你开启的处理线程数,是没有必要的关系的,你就是用一条线程去处理这1万个连接也没问题。只不过多开几条线程能处理的快些。 至于1万个连接是否可以承受要看你的数据量有多大,如果每次只发个几K就没问题。
线程多的话线程间的切换也是耗时的,而且每开启一个线程会占用一定量的内存空间。貌似线程一般和CPU核数有关系,太多没意义。 如果要用一条线程处理一万个连接,貌似就不能用socket,socketserver的inputstream等阻塞方法了。
cityhunter_bj 2012-11-13
  • 打赏
  • 举报
回复
如果是TCP常链接则需要维护1W个线程,若不想起1W个线程可以改用短连接或UDP的方式这样可以减少系统对线程的维护。
zhanshen2891 2012-11-13
  • 打赏
  • 举报
回复
连接数和你开启的处理线程数,是没有必要的关系的,你就是用一条线程去处理这1万个连接也没问题。只不过多开几条线程能处理的快些。 至于1万个连接是否可以承受要看你的数据量有多大,如果每次只发个几K就没问题。
burningbloodgg 2012-11-13
  • 打赏
  • 举报
回复
引用 9 楼 coyer 的回复:
用完成端口是可以的,2~4个线程就够用了。 阻塞,每个线程一个socket,天啦,太可怕了。
什么是完成端口,NIO?
burningbloodgg 2012-11-13
  • 打赏
  • 举报
回复
我知道了,这种情况像http用短连接就行,每次操作创建一次连接就行。
burningbloodgg 2012-11-12
  • 打赏
  • 举报
回复
引用 1 楼 wapjia43106140 的回复:
没问题.你不能开1W个线程.1/60 =300 一秒三百个
TCP是面向连接的,如果需要1W的客户端,服务器端肯定需要1W的线程来读客户端发来的信息啊,虽然大部分时间是阻塞的。
coyer 2012-11-12
  • 打赏
  • 举报
回复
用完成端口是可以的,2~4个线程就够用了。 阻塞,每个线程一个socket,天啦,太可怕了。
youngwolf 2012-11-12
  • 打赏
  • 举报
回复
你这种需要,只要系统允许你开这么多套接字(不要出现too many file descriptors),就是没问题的,效率没什么损失。 但如果客户端有时间对齐,都在一个时间发送数据,则流量也不小。
pzhuyy 2012-11-12
  • 打赏
  • 举报
回复
使用完了就释放掉,使用udp.
wapjia43106140 2012-11-12
  • 打赏
  • 举报
回复
没问题.你不能开1W个线程.1/60 =300 一秒三百个
burningbloodgg 2012-11-12
  • 打赏
  • 举报
回复
引用 7 楼 xuggzu 的回复:
不管是tcp还是udp,连接数量1w不算是很多。 线程数量根据cpu数量或者核数确定,大概2*cpu+2左右。 连接可以同时保持,但线程对数据处理是分时的,不能保证完全并行。 lz这种需求,是常用的网络游戏服务端设计,使用完成端口机制完全可以处理。具体参考可以百度或者找些网络游戏服务端编程类书看看就知道了。
UDP没有连接的概念的。而且看过很多TCP服务器程序,都是while中accept监听传入的连接请求,然后开启一个线程,在这个线程里处理socket的读取和写入操作。如果线程数不等于连接数,如何响应客户端呢?
xuggzu 2012-11-12
  • 打赏
  • 举报
回复
不管是tcp还是udp,连接数量1w不算是很多。 线程数量根据cpu数量或者核数确定,大概2*cpu+2左右。 连接可以同时保持,但线程对数据处理是分时的,不能保证完全并行。 lz这种需求,是常用的网络游戏服务端设计,使用完成端口机制完全可以处理。具体参考可以百度或者找些网络游戏服务端编程类书看看就知道了。
burningbloodgg 2012-11-12
  • 打赏
  • 举报
回复
引用 5 楼 VisualEleven 的回复:
引用 4 楼 burningbloodgg 的回复:引用 1 楼 wapjia43106140 的回复: 没问题.你不能开1W个线程.1/60 =300 一秒三百个 TCP是面向连接的,如果需要1W的客户端,服务器端肯定需要1W的线程来读客户端发来的信息啊,虽然大部分时间是阻塞的。 你用阻塞IO模型不行吗?
可以啊,就是不知道这么多线程数合不合理,像游戏服务器不是每个服务器都是有固定数据量的连接的吗?
Eleven 2012-11-12
  • 打赏
  • 举报
回复
引用 4 楼 burningbloodgg 的回复:
引用 1 楼 wapjia43106140 的回复: 没问题.你不能开1W个线程.1/60 =300 一秒三百个 TCP是面向连接的,如果需要1W的客户端,服务器端肯定需要1W的线程来读客户端发来的信息啊,虽然大部分时间是阻塞的。
你用阻塞IO模型不行吗?

18,356

社区成员

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

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