第三十章 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