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

第二十八章 TCP 客户端 服务器通信 - JOB命令示例

第二十八章 TCP 客户端 服务器通信 - JOB命令示例

JOB命令示例

以下示例显示了一个非常简单的并发服务器,只要它检测到来自客户端的连接,就会产生一个子作业。 JOB指定一个并发服务器位开关值(值16)并通过符号表(值1):16+1=17

server
  SET io="|TCP|1" 
  SET ^serverport=7001 
  OPEN io:(:^serverport:"MA"):200 
  IF ('$TEST) { 
       WRITE !,"Cannot open server port" 
       QUIT }
  ELSE { WRITE !,"Server port opened" }
loop
     USE io READ x ; Read for accept 
     USE 0 WRITE !,"Accepted connection" 
     JOB child:(:17:io:io) ;Concurrent server bit is on 
     GOTO loop
child
  WRITE $JOB,! ; Send job id on TCP device to be read by client 
  QUIT
client
  SET io="|TCP|2" 
  SET host="127.0.0.1" 
  OPEN io:(host:^serverport:"M"):200 ;Connect to server
   IF ('$TEST) { 
       WRITE !,"cannot open connection" Quit }
   ELSE { 
       WRITE !,"Client connection opened" 
       USE io READ x#3:200 ;Reads from subjob 
       }
   IF ('$TEST) { 
       WRITE !,"No message from child" 
       CLOSE io 
       QUIT }
   ELSE {
       USE 0 WRITE !,"Child is on job ",x 
       CLOSE io 
       QUIT }

子进程使用继承的TCP连接将其作业ID(在本例中假设为3个字符)传递回客户机,之后子进程退出。客户端打开与服务器的连接,并在打开的连接上读取子任务的作业ID。在本例中,变量主机的IPv4格式值“127.0.0.1”表示到本地主机的环回连接。如果host设置为服务器的IP地址或名称,则可以在与服务器不同的机器上设置客户端。

原则上,子服务器和客户端可以进行扩展通信,多个客户端可以同时与服务器的各自子服务器进行通信。

请注意,这个简单的示例不包含用于检测和处理断开或读取操作失败的逻辑。

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