第二十章 TCP 客户端 服务器通信 - 立即发送模式(Q 模式)
文章目录
- 第二十章 TCP 客户端 服务器通信 - 立即发送模式(Q 模式)
- 立即发送模式(`Q` 模式)
- 流模式(`S`模式)
- 缓冲区大小
- 服务器端`OPEN`命令
第二十章 TCP 客户端 服务器通信 - 立即发送模式(Q 模式)
立即发送模式(Q
模式)
在立即发送模式下,每个 WRITE
命令都作为其自己的数据包输出。如果不使用立即发送模式,则必须包括终止符或发出命令 WRITE *–3
以输出数据包。
通过指定“Q”
模式字符或/SENDIMMEDIATE
(或/SEN
)关键字参数进入此模式。要关闭此选项,请指定以下任一选项:
USE TCPDEVICE:(/SEN=0)
USE TCPDEVICE:(::"-Q")
要重新打开此选项,请指定以下任一选项:
USE TCPDEVICE:(/SEN=1)
USE TCPDEVICE:(::"+Q")
立即发送模式与/NODELAY
模式结合使用,前者在每次写入时创建一个包,后者在创建每个包时立即发送。当这两个选项都启用时,单个数据突发的传输速度将最大化。当每个数据单元的及时传送至关重要时,例如在传输鼠标移动时,这是有用的。当两者都关闭时,一个数据包可能包含多个写入,一个传输可能包含多个数据包。这减少了网络流量并提高了整体性能。立即发送模式的默认设置为关闭。/NODELAY
模式的默认设置为打开。
流模式(S
模式)
在流模式下, IRIS
不会保留数据流中的TCP
消息边界。发送时,如果数据不适合消息缓冲区, IRIS
会在将数据放入缓冲区之前刷新缓冲区。
接收时,可以接收最大字符串长度的数据。所有读取都等待达到终止符或缓冲区变满的完全超时。当禁用此模式(默认)时,处于数据包模式。
继承 TCP
设备的 Jobbed
进程自动设置为 Stream
格式。可以使用 USE
命令重置格式。
缓冲区大小
TCP
设备的 ibufsiz
和 obufsiz
参数指定用于 TCP
输入和输出的内部 IRIS
缓冲区的大小。在所有支持的平台上,它们可以取 1KB
到 1MB
之间的值。然而,操作系统平台可能使用不同大小的输入和输出缓冲区。如果操作系统平台缓冲区小于 IRIS
缓冲区(例如,64KB
对 1MB
),性能可能会受到影响:WRITE
操作可能需要多次访问操作系统才能发送整个 IRIS
缓冲区; READ
操作可能会返回受操作系统缓冲区大小限制的较小块。为获得最佳性能,用户应试验当前操作系统以确定 ibufsiz
和 obufsiz
的哪些值可产生最佳结果。
服务器端OPEN
命令
处理服务器端 OPEN
时,它会建立一个 TCP
套接字并在套接字上侦听适当端口号上的传入连接请求。端口号要么在参数列表中明确指定,要么从设备名称的数字部分派生。在套接字设置为侦听后,OPEN
立即返回。
如果 OPEN
没有成功,则另一个进程可能已经在该端口号上侦听连接请求。
以下服务器端 OPEN
示例显示了一个设备规范,该规范允许读取和写入最大字符串大小的终止字符串,并使用最大长度读取和写入操作来整合 TCP
通道的使用。
OPEN "|TCP|4":(:4200:"PSTE"::32767:32767)
此示例中的参数参数如下:因为这是服务器端 OPEN
,所以省略了第一个参数(主机名)。第二个参数明确指定端口号 (4200
)。第三个参数是模式代码字符。第四个参数(终止符)被省略。第五个参数是输入缓冲区大小。第六个参数是输出缓冲区大小。
在以下示例中,端口号未指定为参数;它源自设备名称的数字部分。此示例打开端口 4200
,没有指定参数且超时为 10
秒:
OPEN "|TCP|4200"::10
服务器端 OPEN
的默认输入缓冲区大小 (ibufsiz
) 和输出缓冲区大小 (obufsiz
) 参数值为 1,048,576
字节 (1 MB
)。
服务器端 OPEN
支持可选的队列大小参数和可选的“G
”模式参数。这些选项不可用于客户端 OPEN
。
服务器端OPEN
支持可选的/CLOSELISTEN
关键字参数。此选项对于客户端OPEN
不可用。