10/FLP
自由协议
- 状态:稳定
- 编辑:Pieter Hintjens ph@imatix.com
自由协议 (FLP) 定义了在客户端和服务器的 N 对 N 网络中无需代理的可靠请求-回复对话。它起源于《指南》的第 4 章。
许可
版权所有 (c) 2011 iMatix Corporation。
本规范是自由软件;您可以根据自由软件基金会发布的 GNU 通用公共许可证的条款重新分发和/或修改它;无论是许可证的第 3 版本,还是(根据您的选择)任何更新的版本。
分发本规范是希望它有用,但没有任何担保;甚至不包括适销性或特定用途适用性的默示担保。详情请参阅 GNU 通用公共许可证。
您应该已经随本程序收到了 GNU 通用公共许可证的副本;如果没有,请参阅 https://gnu.ac.cn/licenses。
变更流程
本规范是一个自由开放标准(参见“自由开放标准的定义”)并受数字标准组织的共识导向规范系统(COSS)管辖(参见“共识导向规范系统”)。
语言
本文档中的关键词“必须”(MUST)、“不得”(MUST NOT)、“要求”(REQUIRED)、“应”(SHALL)、“不应”(SHALL NOT)、“应该”(SHOULD)、“不应该”(SHOULD NOT)、“建议”(RECOMMENDED)、“可以”(MAY)和“可选”(OPTIONAL)应按 RFC 2119 中所述进行解释(参见“用于RFC中表示需求级别的关键词”)。
目标
自由协议 (FLP) 定义了在客户端和服务器的 N 对 N 网络中无需代理的可靠请求-回复对话。它起源于《指南》的第 4 章。(参见“ØMQ - 指南”)。
FLP 的目标是:
- 建立客户端和服务器之间的 N 对 N 网络,以点对点方式互相连接
- 无需中间代理或设备即可运行。
- 支持多线程服务器实现。
- 支持服务器故障转移和恢复。
架构
总体操作
FLP 将一组(通常较大)客户端与一组(通常较小)服务器连接起来,每个服务器都能替代其他服务器。尽管客户端可以优先使用某些服务器(主服务器、辅助服务器等),但这与 FLP 无关。
在自由模式中,客户端连接到服务器并明确寻址。服务器只能回复那些首先发送了命令的客户端。
客户端可以发出两种类型的命令:
- Ping 命令,其格式为一个包含四个字符“PING”的单帧。服务器必须回复一个包含四个字符“PONG”的消息。
- 请求命令,其格式为两个或更多帧,其中第一个帧是客户端控制帧(CCF),后续帧是请求体。服务器必须将 CCF 未经修改地返回,后跟一个或多个回复体帧。
客户端可以使用 CCF 出于任何目的,包括请求序列编号。
请求和回复路由
客户端和服务器都必须使用 ROUTER (XREP) 套接字。摘自 ØMQ 参考手册(参见“[]()”)
接收消息时,ROUTER (XREP) 套接字应在将消息传递给应用程序之前,在消息前附加一个包含发起端对等体身份的消息部分。发送消息时,ROUTER (XREP) 套接字应移除消息的第一部分,并使用它来确定消息应路由到的对等体的身份。
在此讨论中,此额外帧被忽略。
客户端使用瞬时套接字,且不得设置身份。服务器使用持久套接字,且必须设置身份。
服务器身份是它们的公共端点。这是客户端用于连接服务器的地址字符串,例如“tcp://192.168.55.162:5055”。
服务器可靠性
客户端可以定期发送 ping 命令。如果在该间隔的某个倍数内(通常是 2-3 倍)没有收到“pong”,客户端应该认为服务器“已断开连接”。