我是 quickfix 的新手,我有几个关于 quickfix 库的问题,我很乐意从你那里得到答案:
我正计划开发同时从多个客户端获取 FIX 请求的 FIX 服务器。对此,
a)如果我需要区分来自不同客户端的请求(如何区分这些请求),TargetID(即CLIENT1)的确切含义是什么?
b) TargetID 关于服务器/客户端的一般含义是什么?
c) 我如何添加自定义字段和自定义消息,以及与消息破解对象的确切连接是什么?
问候,
莫迪凯·雅科比
我是 quickfix 的新手,我有几个关于 quickfix 库的问题,我很乐意从你那里得到答案:
我正计划开发同时从多个客户端获取 FIX 请求的 FIX 服务器。对此,
a)如果我需要区分来自不同客户端的请求(如何区分这些请求),TargetID(即CLIENT1)的确切含义是什么?
b) TargetID 关于服务器/客户端的一般含义是什么?
c) 我如何添加自定义字段和自定义消息,以及与消息破解对象的确切连接是什么?
问候,
莫迪凯·雅科比
TargetID
是您发送消息的框的名称,如果您需要区分多个客户端的会话(我假设为一个服务器),只需给每个客户端不同的SenderCompID
.
在您的服务器上,您必须为每个客户端设置一个会话。
一个服务器-客户端会话的示例:
在您的服务器 (INCA) 上:
[SESSION]
BeginString=FIX.4.0
SenderCompID=INCA
TargetCompID=CLIENT1
在您的客户端(CLIENT1)上:
[SESSION]
BeginString=FIX.4.0
SenderCompID=CLIENT1
TargetCompID=INCA
quickfixengine 根据这 3 个值区分会话(服务器-客户端连接):(BeginString,
TargetCompID, SenderCompID)
当您发送消息时,您将您的 comp idsendercompid
和目标放在您发送消息的位置targetcompid
。您
beginstring
根据希望用于通信的修复版本指定 ( FIX4.0
/ FIX4.2
....)。
我想上面已经解释过了,TargetID 是您发送消息的框的 ID。当服务器响应客户端时,它将设置SenderCompID
为它的(服务器)ID,TargetCompID
并将设置为发送响应的客户端。
自定义字段取决于确切的要求。FIX 协议指定 FieldID 大于保留范围的自定义字段,因此您的自定义字段可以以 FieldID 5000 开头。
关于如何去做有几个选择。最简单的一种是只使用 message 的数值并将其添加到 message 中(我假设您使用 c++,但它与其他语言相似)。
就像是:
msg.setField(5000,"SomeValue");
此自定义字段不会自动验证,因为 FIX 不知道它。FIX 使用指定了每个消息和字段的 xml 文件。
有一个适当的过程可以将新消息添加到 xml 规范,然后重新生成 quickfixengine 代码以生成新的字段结构,但到目前为止我不需要这样做。
消息破解器只是一种获取通用消息指针的方法,然后它会查看消息 ID(如果我记得的话)并调用适当的处理程序。
这是一个包含大量字符串操作的大型 if 语句,因此有时最好自己进行检查,但您应该可以使用它。
这就是方法的样子,你会明白的:
void crack( const Message& message,
const FIX::SessionID& sessionID )
{
const std::string& msgTypeValue
= message.getHeader().getField( FIX::FIELD::MsgType );
if( msgTypeValue == "0" )
onMessage( (const Heartbeat&)message, sessionID );
else
if( msgTypeValue == "A" )
onMessage( (const Logon&)message, sessionID );
else
if( msgTypeValue == "1" )
onMessage( (const TestRequest&)message, sessionID );
else
然后,您通常会实现适当的方法,例如,如果您只关心
ExecutionReport
您在代码中实现的 s :
virtual void onMessage( ExecutionReport&, const FIX::SessionID& );
然后您的应用程序将获得,
ExecutionReport
以便您可以处理它。您未实现的onMessage
消息方法只是什么都不做并返回,因此消息永远不会到达您的应用程序。
如果您需要添加自定义消息/字段,我发现这很有用,但我没有使用它。