六个程序之间使用SOCKET方式通讯,某个客户端程序可能要进行大量运算,这样的方法会不会丢数据?(100分)

  • 主题发起人 主题发起人 linkman
  • 开始时间 开始时间
L

linkman

Unregistered / Unconfirmed
GUEST, unregistred user!
其中三个前置程序负责采集不同类型装置的数据,采集的周期1秒之内,将采集的数据向网络代理程序传送。
网络代理程序接收到前置程序的数据,分别向两个后台程序发送。
两个后台程序发送的控制命令传给网络代理程序,网络代理现将控制命令发往不同的前置程序。
某个后台程序可能需要花费3-5秒生成报表数据,或是5-6秒历史数据查询,或是2-3秒调入弹出画面。
网络代理采用TServerSocket,其余程序采用TClientSocket。采用非阻塞方式通讯。
请问:在后台程序必须将费时间的操作放在主线程的前提下。会不会丢失采集的数据?
 
会,TCP/IP协议栈缓冲区是有限的,你的程序24小时不停地向里面灌数据,而
从缓冲区读取数据的速度又很慢,必然会导致缓冲区满,无法接受新数据了
 
用阻塞方式不是好一些吗?可以在 Write 以前主动等一下,瞎说的
 
数据暴发时会丢失,这总不是一件好事,可以建立确认/重发的机制,
如果要求实时不丢失数据,那也就得加机器了
 
多人接受答案了。
 

Similar threads

后退
顶部