Windows服务中TCP / IP服务器的TAP实现

我正在编写Windows服务,该服务实现了一个TCP服务器,该服务器从少量(

在TAP之前的日子里,我会为每个客户端使用一个单独的线程编写此代码,并阻塞NetworkStream.Read(),并设置超时以检测客户端何时未在给定间隔内报告。

我喜欢我在https://social.technet.microsoft.com/wiki/contents/articles/30394.simple-multi-user-tcpip-client-server-using-tap.aspx找到的Reed Kimble编写的TCP / IP客户端和服务器的TAP解决方案。但是,我正在努力处理一个或多个客户未及时报告的情况。我在ProcessClientAsync中的(伪)代码如下:

read = 1
while read>0 {
    read = Await stream.ReadAsync(buffer,buffer.Length,Cancel)
    if read > 0 then {
        if I have a complete message from this client then {
            if I have current timestamped data for ALL clients then {
                ' need to detect  missing client(s) here...
                DoProcessData() ' Maybe using Task.Run...
            }
        }
    }
}

我看到的一个建议是添加一个Task.Delay()与ReadAsync一起运行,并使用Await Task.WhenAny而不是直接等待ReadAsync。有没有更好的方法来处理这种情况?

对于我的用例而言,使用TAP解决方案似乎是正确的主意吗?我见过的大多数异步代码示例都包含一个UI(我没有)。在没有GUI的服务器端(尤其是在服务内部)使用服务器时,我找不到很多建议。

最后,在声明超时之前,我应该等待一个预期的数据包到达多长时间的标准值?我应该提到的客户是固定位置的蜂窝调制解调器,通常具有良好的信号强度,可以连接到数据采集设备...

wdjylove 回答:Windows服务中TCP / IP服务器的TAP实现

暂时没有好的解决方案,如果你有好的解决方案,请发邮件至:iooj@foxmail.com
本文链接:https://www.f2er.com/3085040.html

大家都在问