简单的问题,请教,分只给一人
我的方法如下:
服务器端
WinMainSock 属于winsock控件,非数组
WinClientSock 属于winsock控件数组
WinMainSock用于监听,WinClientSock用来连接,都是一对一
现在有一问题是
如果有两个或N个客户端发送数据到服务器,(数据<=8k),这时服务器端的WinClientSock控件数组是否会有一个 优先顺序,即先接到数据的先处理,后面的要等到第一个处理完成后再接收,还是同步都会处理接收数据?
网上找到的一句话:
服務端建一個WINsock數組,指定其中一個為偵聽專用,負責響應新的連接請求,其它都是一對一的關系。通常來說,隻要不是很多很多,服務器不會癱瘓。
不知道对不
[解决办法]
控件数组并非控件,因此谈不上WinMainSock与WinClientSock一对一,到是可以看成是一对多.
每一个控件(包括在数组中的)都应该绑定一个端口.
如果控件数组中的每一个控件都向另一个控件的端口发数据,那当然要一个个进行处理,否则缓冲区不是乱了套了.
[解决办法]
不可能有同步的数据产生,肯定是按任务队列形式逐个处理的,只是因为分包的数据量不大,而且计算机的速度较快,给人的感觉像是在同步处理,但介于底层的基础(一条网线传输多个网络数据),在基础层已经排队处理了,怎么还可能正真的同步?
要知道,Sock通讯到了所谓的应用层开发底层,也就是到API接口,所谓的发送就是吧数据放入发送缓冲区,至于系统如何队列发送数据,那是另外一回事,不过可以肯定的是,这种工作肯定是队列形式出去或进来的。
[解决办法]
客户端很多时,要看多到什么程度.
控件数组的开销远比一个线程大得多,到时内存与CPU的资源就成了问题了.
我曾经用这种结构做成了一个集团用聊天/文档分享与管理程序,在线300人左右没有发现问题.
代码与下面这个差不多:
http://blog.m5home.com/article.asp?id=169
[解决办法]
不去考虑什么 cpu时间片的问题,不去考虑什么轮流执行的问题
先到先处理,不会产生管道阻塞,因为这是并发性质的,否则网络不就完蛋了吗....
每个 winclient 都绑定的是不同端口对应不同的客户端, 这样本身就不存在你说的问题.
但是单线程而言,这个问题还是存在的,如果你的程序在疯狂的干别的事,而没有时间响应新来的数据通知,还是会造成阻塞的
[解决办法]
以后注意下你的提问方式,提个问就提个问,什么分只给一人?简单的问题搞得那么复杂……
以为大家都仅仅为了那些个垃圾分数而来?对一个问题,仁者见仁智见智,如何评价“最”正确?
提个问还一副“分在我手我就是老大”的模样,我是不知道,如果知道我也懒得打字。
不捣蛋了,说个题外话。
If 本楼给分 Then楼主木有小jjEnd If