讨论:局域网,小连接数(10个左右),长连接,大数据量用什么方式比较好呀 ( 积分: 100 )

  • 主题发起人 主题发起人 dearwolf
  • 开始时间 开始时间
呵呵 我再试试吧 谢谢你了。
另: 在READ事件里面做的操作多了,对传输会有影响吗?我的问题真的是出在这儿吗?
上午考虑改成这样:服务器端收到数据后,不处理,直接移到一个缓冲区,然后用线程去处理并给客户端发应答。这样是不是就能避免出现莫名其妙的收不到问题了?
 
看来我还是没表达明白,在READ事件里做更多的事情会降低程序的性能,真正问题的出现应该是你在一次READ事件里去把所有的已到的和还未到达的数据读完,而事件通知模型应该是尽快响应完本次事件,也就是去接收缓冲区的数据,以便空出来去接收更多的数据,当数据再次到达时,它仍然会通知到应用程序,而不需要你在一次事件里阻塞读完所有要收的数据。我怀疑此时你的作法会造成消息阻塞,你收完了所有数据却只响应了一次消息事件。当然,我也不是高手,也不是百分百肯定。
如果你真想用单独线程处理的话,就直接用INDY做算了,他是一个连接一个线程,单独处理,互不干扰,但前提是你的多线程处理、同步一定要过关,否则照样出现莫名其妙的问题。
实际上我觉得你这个只是小问题而已,很好解决的,希望你早日搞定。
 
呵呵 我也想 可是这种问题本身就比较难试验出来,我是想知道这种问题到底是什么原因造成的。
前几天把发送的数据内容压缩到1K以内,运行了10个小时左右,没有出现问题。可是这样是不行的,这样发送数据的速度太慢了,客户端会积压数据。而且也不知道是不是从根本上解决了这个问题。
现在正在实验,不过好像发送的数据量越大,出现问题的时间越短??? 不知道是不是数据量有关系
希望有过这方面经验的各位高人给小弟指点一二,再次谢谢了!
 
为什么1K数据不会出问题,那是因为你在一次READ事件里就收完了数据,不用运行到下面的循环里去。你的数据越大,在循环里执行的就越久,我估计造成的消息阻塞就越严重,所以问题出现的时间越短,我觉得你完全可以按我说的方法试试。

我用ICS做的中转服务根本没出现过这种情况,几百兆的数据在每次收发100K的传输情况下很快就完了,而且程序稳定,又不要写多少控制代码。只是机制与TSERVERSOCKET不一样,直接派生它的一个SOCKET类,一下就搞定。

如果你要写更多的网络程序,在DELPHI的IDE下,我建议是:异步模式用ICS,阻塞模式用INDY,高性能要求用API+完成端口模型。
 
经典,学习一下,佩服guanyueguan,真是厉害啊,大家学习!
 
TO guanyueguan
如果是你说的这种情况,消息应该不会被一直阻塞吧,我现在的问题是出现问题后,无论发送什么数据,那怕只是一个握手的包,都不会被接收,服务器端的READ事件根本就不会被触发。可是服务器向有问题的工作站发送数据却很正常。工作站可以正常的接收到。这是怎么一回事呢?
 
我不知道你說的有問題的工作站是不是服務器收不到的工作站,而且我在想發回的數據應該只是一個應答而已。其實這也不難理解,我是猜測ServerSocket(對就這個客戶端)的READ事件消息阻塞,並不是說這個Socket已經出問題,所以它是可以正常發送數據的,卻不響應READ事件。
如果你客戶端也是和服務器一樣的做法收大量數據的話,我估計一樣會出現收不到數據的情況,不信你可以試試。
看來你還是不相信或不明白我說的問題點,這個問題已經有不少貼了,討論結果大部分結論就是減小包大小,降到系統緩沖區大小以內或調整緩沖歐到合適大小,但我覺得與其這樣做,還不如直接用別人已經做好組件,不用自己去處理緩沖區的問題。
 
有问题的工作站就是指的数据发不到服务器的工作站(或者说是服务器接收不到其数据的工作站)。
我考虑问题也是出在这个数据到达的消息被阻塞了,可是就是不知道是什么原因造成的,其实我上面那种方式(循环等直到接收完要接收的数据)来接收数据,也是参考了以前的老贴子,有不少人都是用这种方式接收的,不过他们好像都是用来传送文件。
到于ICS,我刚下载了,还没看,你能给我个简单的例子吗 可以建立连接并收发数据的。
我的邮箱 tyl456@163.com
呵呵 如果不方便就算了。
 
為什麼傳文件很少出現這個問題(說很少是因為我猜測在傳大文件(幾百兆或上G)時這種方式也會出此問題),那是它傳送完成後就斷開了,SERVERSOCKET就釋放了,自然就沒事了,如果它是在保持連接的情況下不斷傳文件的話,我想出這樣的問題是少不了的了。
ICS的例子就在它的壓縮包裡,挺多的,我也是看它自己的例子,實在不行就看原代碼,強烈建議你有空去看看它的源代碼,對你會有很多幫助。
 
噢 呵呵 谢谢你了
再等几天,看还有没有其它的观点就结贴了
 
救命啊?最近給Borland中國盯上了!請有正版Delphi使用授權的人幫助一下
QQ:10961560
 
To guanyueguan
已经按你的思路改了程序,正在测试 有结果了再告诉你 呵呵
 
程序运行一晚,到现在已经14个小时,包大小为5K多,很正常 没有出现任何问题。
呵呵 谢谢 guanyueguan兄
结帐散分
 
后退
顶部