文章
· 十一月 23 阅读大约需 2 分钟

第三十章 TCP 客户端 服务器通信 - 作业服务器资源

第三十章 TCP 客户端 服务器通信 - 作业服务器资源

作业服务器资源

如果正在编写一个IRIS服务器来与无法控制的客户端连接,则服务器进程必须发出CLOSE命令来关闭TCP连接。就 IRIS而言,CLOSE命令确实会关闭连接,但是在内部TCP/IP会在服务器上为这个连接保留最长两分钟的资源。

jobserver用于为TCP/IP作业提供服务时,可能会产生意想不到的结果。当一个JOBSERVER进程执行暂停时,该进程立即返回到可用的JOBSERVER进程池,但其资源在内部保留最多两分钟。由于JOBSERVER进程是在第一个可用的基础上分配的,因此来自数量相对较少的客户机的重载可能会耗尽JOBSERVER进程的资源。

为了避免这个问题,在JOBSERVER下运行的JOB打开的TCP/IP服务器应该显式地发出一个CLOSE命令,然后在最后的QUITHALT)命令之前发出一个简短的HANG命令。根据TCP/IP规范,需要一个HANG 120来保证在JOBSERVER的转世之间没有资源仍在使用。在实践中,一秒的HANG通常足以在JOBSERVER进程之间均匀地分配资源负载。

自动切断

TCP绑定连接在以下条件下自动关闭:

  • IRIS致命错误
  • 客户端或服务器进程的RESJOB
  • iris stop

  • iris force

断开连接的影响

断开连接对保留在输出缓冲区中的数据的影响由OPENUSE期间建立的/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

讨论 (0)1
登录或注册以继续