来自已登录用户的所有消息是否都经过相同的修复会话?

问题描述

我正在尝试为我们正在工作的应用程序构建一个项目结构。修复协议世界的新手。

我不明白的是,所有消息是否/应该通过相同的客户端-服务器会话,还是为每个登录应用程序的用户创建一个新会话?我认为第一个选项比另一个选项更优化,因为它会给修复引擎带来更少的负载,但我想知道最佳实践是什么。

解决方法

您可以将会话视为 FIX 客户端和 FIX 服务器之间的套接字连接。当 FIX 客户端打开这样的套接字连接时,它发送的第一条 FIX 消息是 Logon,并且此消息中的字段向 FIX 服务器标识 FIX 客户端。 FIX 服务器可以通过响应 Logon 消息来接受连接,或者通过关闭套接字拒绝连接。

根据您问题中提供的有限细节,我猜测您的“应用程序”是一个 FIX 客户端,它不会代表自己创建 FIX 消息,而是充当委托服务器。例如,可能有多个用户,每个用户都有自己的 GUI,将消息(以非 FIX 格式)发送到委托服务器,然后委托服务器将这些传入的消息转换为 FIX 格式并充当 FIX 客户端将这些消息转发到 FIX 服务器。在这种情况下,会想到几个选项。

第一个选项是委托服务器为每个用户打开一个到 FIX 服务器的单独套接字连接,并使用特定于用户的套接字连接发送带有该用户凭据的 Logon 消息。 用户 1 到委托服务器的消息通过 socket 1 委托给 FIX 服务器,用户 2 的消息通过socket 委托2,依此类推。

第二个选项是委托服务器打开到 FIX 服务器的单个套接字连接,发送一次 Logon,然后,在代表用户发送的每条消息中,使用标头字段,例如 {{ 1}}、OnBehalfOfCompIDOnBehalfOfSubID 来识别用户(免责声明:我很少有机会使用这样的标题字段,而且我对它们的预期用途的理解可能不正确,所以这个建议可能是语义上的有缺陷;如果是这样,我希望这里的另一个用户能在评论中纠正我)。或者消息正文中的 SenderSubID 字段可能用于此目的。

前两个选项基于 FIX 服务器需要知道向其(间接)发送消息的单个用户的身份的假设。如果所有用户都代表一个法人实体进行交易,则第三种选择是相关的。在这种情况下,可能不需要向 FIX 服务器公开单个用户的身份,因此委托服务器可以有一个到 FIX 服务器的套接字连接并发送单个 Account 消息来标识法人实体,绝不会将个人用户的详细信息传递给 FIX 服务器。

相关问答

Selenium Web驱动程序和Java。元素在(x,y)点处不可单击。其...
Python-如何使用点“。” 访问字典成员?
Java 字符串是不可变的。到底是什么意思?
Java中的“ final”关键字如何工作?(我仍然可以修改对象。...
“loop:”在Java代码中。这是什么,为什么要编译?
java.lang.ClassNotFoundException:sun.jdbc.odbc.JdbcOdbc...