文章
· 十一月 13 阅读大约需 3 分钟

第二十章 TCP 客户端 服务器通信 - 立即发送模式(Q 模式)

第二十章 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 设备的 ibufsizobufsiz 参数指定用于 TCP 输入和输出的内部 IRIS 缓冲区的大小。在所有支持的平台上,它们可以取 1KB1MB 之间的值。然而,操作系统平台可能使用不同大小的输入和输出缓冲区。如果操作系统平台缓冲区小于 IRIS 缓冲区(例如,64KB1MB),性能可能会受到影响:WRITE 操作可能需要多次访问操作系统才能发送整个 IRIS 缓冲区; READ 操作可能会返回受操作系统缓冲区大小限制的较小块。为获得最佳性能,用户应试验当前操作系统以确定 ibufsizobufsiz 的哪些值可产生最佳结果。

服务器端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不可用。

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