文章目录
- 第三十章 TCP 客户端 服务器通信 - 作业服务器资源
- 作业服务器资源
- 自动切断
- 断开连接的影响
- 相关类
第三十章 TCP 客户端 服务器通信 - 作业服务器资源
作业服务器资源
如果正在编写一个IRIS服务器来与无法控制的客户端连接,则服务器进程必须发出CLOSE命令来关闭TCP连接。就 IRIS而言,CLOSE命令确实会关闭连接,但是在内部TCP/IP会在服务器上为这个连接保留最长两分钟的资源。
当jobserver用于为TCP/IP作业提供服务时,可能会产生意想不到的结果。当一个JOBSERVER进程执行暂停时,该进程立即返回到可用的JOBSERVER进程池,但其资源在内部保留最多两分钟。由于JOBSERVER进程是在第一个可用的基础上分配的,因此来自数量相对较少的客户机的重载可能会耗尽JOBSERVER进程的资源。
为了避免这个问题,在JOBSERVER下运行的JOB打开的TCP/IP服务器应该显式地发出一个CLOSE命令,然后在最后的QUIT或HALT)命令之前发出一个简短的HANG命令。根据TCP/IP规范,需要一个HANG 120来保证在JOBSERVER的转世之间没有资源仍在使用。在实践中,一秒的HANG通常足以在JOBSERVER进程之间均匀地分配资源负载。
自动切断
TCP绑定连接在以下条件下自动关闭:
-
IRIS致命错误 -
客户端或服务器进程
的RESJOB -
iris stop -
iris force
断开连接的影响
断开连接对保留在输出缓冲区中的数据的影响由OPEN或USE期间建立的/CLOSEFLUSH设置决定。默认是刷新数据。
如果一方关闭连接,但另一方发出新的WRITE命令,则第一个WRITE命令可能成功。任何附加的WRITE命令都会收到<WRITE>错误。
从客户端,所有发送到关闭连接端的READ命令都收到<READ>错误。必须关闭设备并重新打开,以重新与服务器建立通信。
在服务器端,<READ>或<WRITE>错误后的第一个READ等待并接受一个新的连接。
可以使用%SYSTEM.TCPDevice.GetDisconnectCode()在方法中以返回导致当前TCP设备上<READ>或<WRITE>错误的内部错误。$IO必须是TCP设备。
相关类
%SYSTEM.INetInfo
%SYSTEM.TCPDevice
%SYSTEM.Socket
%IO.Socket
