怎么让socket服务器能接受大量的连接?

lsxsxs 2011-11-23 11:45:14
我现在采用的方法是一个连接建一个线程处理,这种方法我相信在连接数量很大的的时候肯定不行,比如上千个连接的话我想肯定会有问题。有没有什么方法能接受上千个连接,并且会比较稳定的。
...全文
339 20 打赏 收藏 转发到动态 举报
写回复
用AI写文章
20 条回复
切换为时间正序
请发表友善的回复…
发表回复
iblold 2011-12-02
  • 打赏
  • 举报
回复
[Quote=引用 17 楼 lsxsxs 的回复:]
引用 16 楼 hurryboylqs 的回复:
这就是IOCP的聪明之处,你就连上来不发数据不是来找茬的吗?
然后你不得不发一包数据,那么这包数据就得经过我的验证是否合法
不合法,我又可以判定你是来找茬的。

我现在要准备做的程序就是连上来了不发数据给我,而要我发数据给客户端。这就使得我必须在客户端连接上就做出响应,如果我不先给客户端发数据,我永远都等不到客户端发上来的数据。就是不知道……
[/Quote]

AcceptEx的时候dwReceiveDataLength填0,那样的话一旦有客户端连接直接就accept而不等待用户消息了
小布 2011-12-02
  • 打赏
  • 举报
回复
完成端口。搜一下吧。
chenjiawei007 2011-11-25
  • 打赏
  • 举报
回复
你最初的设计是一个连接一个请求,这样的模型就是无法支持大连接数。

线程本身占用一定开销,而且相当可观,在上500个线程后CPU就很吃紧。

首先你应该改正你的线程模型设计,然后再选择你擅长的网络模型。

线程模型简单的设计:

单独线程处理accept请求,加入连接管理容器。

根据cpu数据量,开辟相应数量的线程去处理网络事件。(如果这里处理数据量非常大,可以考虑线程池做优化)
lsxsxs 2011-11-25
  • 打赏
  • 举报
回复
[Quote=引用 16 楼 hurryboylqs 的回复:]
这就是IOCP的聪明之处,你就连上来不发数据不是来找茬的吗?
然后你不得不发一包数据,那么这包数据就得经过我的验证是否合法
不合法,我又可以判定你是来找茬的。
[/Quote]
我现在要准备做的程序就是连上来了不发数据给我,而要我发数据给客户端。这就使得我必须在客户端连接上就做出响应,如果我不先给客户端发数据,我永远都等不到客户端发上来的数据。就是不知道这里怎么弄。
hurryboylqs 2011-11-25
  • 打赏
  • 举报
回复
这就是IOCP的聪明之处,你就连上来不发数据不是来找茬的吗?
然后你不得不发一包数据,那么这包数据就得经过我的验证是否合法
不合法,我又可以判定你是来找茬的。
lsxsxs 2011-11-25
  • 打赏
  • 举报
回复
谢谢各位提示啊。我下载了一个完成端口的例子在看,但是发现一个连接在连接上的时候似乎是收不到任何信息的,只有它发送第一条数据才会一起收到它的连接信息和第一条数据。在网上看到说用getsockopt来一直循环检查,但我还没搞懂怎么用它来一直检查
hurryboylqs 2011-11-24
  • 打赏
  • 举报
回复
几百上千个链接是很小的了
langyano1 2011-11-24
  • 打赏
  • 举报
回复
IOCP 完成端口,内核级异步高效的东东
yynetsdk 2011-11-24
  • 打赏
  • 举报
回复
select
iocp
mayudong1 2011-11-24
  • 打赏
  • 举报
回复
可以搜索一下socket io模式
chen837454773 2011-11-24
  • 打赏
  • 举报
回复
用完成端口模式
「已注销」 2011-11-24
  • 打赏
  • 举报
回复
IOCP可以轻易handle
zhongguoren666 2011-11-24
  • 打赏
  • 举报
回复
用IOCP可以解决这个问题,要是没记错的话,能支持同时连接65536个。
这个是我的博客:http://blog.csdn.net/zhongguoren666/article/details/7000710
有文章,还有下载源码地址。下载的的源码在VC6。0下可直接使用。
欢迎访问。
smwhotjay 2011-11-23
  • 打赏
  • 举报
回复
一线程一连接是串行模型..支撑个800连接没问题.但cpu有时不稳定.
还是iocp.写的代码架构好可以支撑几k没问题.
Bestsharp007 2011-11-23
  • 打赏
  • 举报
回复
用线程池
3楼说的对,
windows下可以用IOCP,参考http://blog.csdn.net/piggyxp/article/details/6922277
linux下用e-poll,这个我也没接触过
lsxsxs 2011-11-23
  • 打赏
  • 举报
回复
就是TCP通信的服务器端,有可能会有几百上千个连接收发数据,有有这方面经验的吗,像这种需要支持很多连接的服务器主要是用什么方法呢
lsxsxs 2011-11-23
  • 打赏
  • 举报
回复
[Quote=引用 3 楼 ouyh12345 的回复:]
iocp
e-poll
[/Quote]
能详细说说吗
ouyh12345 2011-11-23
  • 打赏
  • 举报
回复
iocp
e-poll
  • 打赏
  • 举报
回复
同样的程序,可以做负载均衡。
lsxsxs 2011-11-23
  • 打赏
  • 举报
回复
自己顶一下,快来人看啊

18,356

社区成员

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

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