当客户端请求一个Service时,kbmWTCPIPInfyClientTransport.Active是什么样呢?做一个简单的测试,原来是这样:
当 kbmMWSimpleClient1.Request时,会检查使用的Transport是否Active,如果没有打开,则Active=True. 调用后,Transport.Active自动为True!当检查到已经为Active,则直接发出请求Request。
Transport关于联接有三个事件可用:
Connected:当Transport=True时触发
DisConnected:当Transport=False时触发
ConnectionLost:目前测到两种情况,服务器没有开启与开启后关掉服务器,这时,客户端的Transport发出请求时,因找不到服务器,会触发ConnectionLost事件,当关闭掉客户端应用时,还会触发DisConnected事件。
理解几个事件的触发机制点,对于处理界面很重要。比如当客户在使用的过程中,断网等原因无法正常执行客户端请求时,可以用这几个事件,做出友好的提示及进一步的处理。
MaxRetries:重新联接次数,默认值为0,即不重新联接。再做一下实验,看看这个属性的作用:
1.打开Server,让其可以接受用户端的请求
2.打开Client,向Server发出一次请求,这时,客户端的Transport变成Active状态
3.把Server关掉,再重新打开:当MaxRetries为0时,客户端无法向Server发出请求,触发ConnectionLost事件;当MaxRetries不为0,则客户端能够正常向Server发出请求并得到返回结果。这个特性真是太棒了!
4. 当设置为非0时,客户发出一次请求,在无法联接到服务器的情况,按该值尝试联接次数,每一次重新联接服务器,都触发OnReconnect事件,该事件中 的RetriesLeft参数,表明还剩余几次重新联接。可以根据这个值,显示一个重新联接的进度条给用户。当客户端执行了MaxRetries次联接报 务器的动作,都无法联接时,触发ConnectionLost事件。
总结MaxRetries属性,就是客户端在无法联接服务器的情况下,执行多少次尝试联接服务器。
客户端在向服务器发出一次请求后,即客户端联接服务器的状态下,把服务器关掉,即断开与客户端的联接,客户端竟没有出错误提示,而是静静的等待,配合MaxRetries属性的使用,对于适应恶劣网络环境,怎一个爽字了得!真是佩服kbmMW!