我们有一个使用Delphi 2010和Indy 10开发的应用服务器.该服务器每秒接收超过50个请求,并且运行良好.但在某些情况下,在我看来,Indy非常模糊.他们的组件很好,但有时我发现自己只是为了理解一个简单的事情而深入挖掘源代码. Indy缺乏良好的文档和良好的支持.
我遇到的最后一件事对我来说是一个大问题:我必须检测客户端何时正常断开连接(例如,当客户端崩溃或关闭时.不告诉服务器它将断开连接)并且indy无法去做.如果我想要,我将不得不开发心跳,汇集或TCP保持活动等算法.我不想花更多的时间来做一个,至少我认为,组件工作.经过一些研究,我发现这不是Indy的错,但这是所有阻塞套接字组件的问题.
我遇到的最后一件事对我来说是一个大问题:我必须检测客户端何时正常断开连接(例如,当客户端崩溃或关闭时.不告诉服务器它将断开连接)并且indy无法去做.如果我想要,我将不得不开发心跳,汇集或TCP保持活动等算法.我不想花更多的时间来做一个,至少我认为,组件工作.经过一些研究,我发现这不是Indy的错,但这是所有阻塞套接字组件的问题.
现在我真的想把服务器的核心改成另一个好的套件.我必须承认我倾向于使用非阻塞套接字.基于此,我有一些问题:
>从阻塞套接字切换到非阻塞套接字有什么好处?
>我能否检测到客户端断开连接(非正常)?
>哪个组件套件拥有最好的产品?我所说的最好的产品是:快速,良好的支持,良好的工具和易于实施.
我知道这一定是一个主观问题,但我真的很想听到你的意见.我的第一个问题是我最关心的问题.我不在乎我是否需要支付100,500,1000,10000美元,但我想要一个完整的解决方案.现在,我在考虑Ip*works.
编辑
我觉得有些人不明白我想要什么.我不想创建自己的套接字.我一直在使用插座很长时间,我厌倦了它.真.
非阻塞套接字可以检测客户端断开连接.这是一个事实,它在整个互联网上都有很好的文档.非阻塞套接字始终检查套接字状态以查找新的传入数据,并且可以检测到套接字无效.这不是心跳算法.在客户端使用心跳算法,它会定期向服务器发送数据包(也称为保持活动状态)以告知它仍处于活动状态.
编辑
我不是说清楚.也许是因为英语不是我的主要语言.我并不是说可以在不尝试从套接字发送或接收数据的情况下检测掉线连接.我所说的是每个非阻塞套接字都能够做到这一点,因为他们不断尝试从套接字读取新的传入数据.为什么这么难理解?如果你们下载并运行ip *工程演示,特别是echoserver和echoclient(都使用TCP),你可以自己测试.我已经测试了它,它的工作方式与我预期的相同.即使您在非阻塞模式下使用旧的TCPSocketServer和TCPSocketClient,您也会看到我的意思.