On 11月12日, 下午12时36分, 十七 <onlyyoul...@gmail.com> wrote:
> 那线程会不会太多了呢?
>
> 刚接触网络编程这方面,还不太熟,呵呵。
>
> 2009/11/12 qiaojie <qiao...@gmail.com>
>
>
>
> > 300个连接用同步调用就可以了,一个连接一个线程。
>
> > 2009/11/12 十七 <onlyyoul...@gmail.com>
>
> >> 现在有一个服务器模型的需求,要主动监听某个端口,然后由客户端主动连接上来发送一个请求,之后上层分析该请求,向客户端的这个连接发送大量数据。
>
> >> 服务器的并发数并不高,能同时处理300左右的连接就可以了,但是每个连接的流量都比较大,峰值每个可能会有4~5Mbyte每秒。
>
> >> 之前使用的IOCP模型,但是设计比较简陋,总共开了一个Listen线程,CPU数*2+2个工作线程,使用异步投递,上层调用Send方法将要发送的数据挂在每个套接字上下文的发送链上,然后工作线程处理完一个发送的Buffer后再投递下一个。
>
> >> 但是实际使用中,如果套接字的发送链长度不加限制,则内存占用有可能一下涨很高,但是如果加了限制,则上层调用Send太快,很可能超过该长度,之后的数据就丢掉了。
>
> >> 请问有没有其他更好的模型适用于这种需求呢?
>
> >> --
> >> 曾梦想仗剑走天涯,看一看世界的繁华.
>
> --
> 曾梦想仗剑走天涯,看一看世界的繁华.
一般而言,一个接收数据的线程,一个是发送数据的线程,业务逻辑处理的线程可以有n个,具体而定。接收数据的线程按照某个规则分发给不同的业务逻辑处理现场即可。发送数据的线程,里面有个数据队列,存放发送失败的数据,每隔一定时间查询下这个队列是否有数据,如果有的话,就立即发送。
负载接收数据的线程,参与的运算很少,就是负责将数据分发给不同的逻辑单元处理。同理负责发送的线程。客户端与服务器交互的数据,一秒钟能到多少?服务器与客户端之间的网络带宽如何?还有之间的数据是如何定义的。服务器段发送缓冲区是如何设计的?这些决定了服务器占用的内存了。线程的创建是否基于线程池,缓冲区以及缓冲溢出的处理办法设计,IOCP的设计等等这些决定了性能。还是自己多做测试吧,具体情况具体分析了。
好的,多谢指点了。:)2009/11/13 songlin luo <songl...@gmail.com>
负载接收数据的线程,参与的运算很少,就是负责将数据分发给不同的逻辑单元处理。同理负责发送的线程。客户端与服务器交互的数据,一秒钟能到多少?服务器与客户端之间的网络带宽如何?还有之间的数据是如何定义的。服务器段发送缓冲区是如何设计的?这些决定了服务器占用的内存了。线程的创建是否基于线程池,缓冲区以及缓冲溢出的处理办法设计,IOCP的设计等等这些决定了性能。还是自己多做测试吧,具体情况具体分析了。
On 11月12日, 上午11时07分, 十七 <onlyyoul...@gmail.com> wrote:
> 现在有一个服务器模型的需求,要主动监听某个端口,然后由客户端主动连接上来发送一个请求,之后上层分析该请求,向客户端的这个连接发送大量数据。
>
> 服务器的并发数并不高,能同时处理300左右的连接就可以了,但是每个连接的流量都比较大,峰值每个可能会有4~5Mbyte每秒。
>
感觉这么大流量的系统,瓶颈多半在网络带宽吧。你的出口带宽保证够用吗?
2009/12/2 十七 <onlyy...@gmail.com>:
2009/12/7 yuliuxuanke <yuliu...@gmail.com>: