金融信息交换协议(FIX)5.0 FIXT1.1(5)

6 FIX 会话层测试用例和期望行为
6.1 Applicability 适用性
本文档在2002年9月20日最后被修订,当时的FIX协议的最新版本为带有20020930的扩展的FIX 4.3 。此文当适用于FIX4.X,除非特别说明。
6.2When to send a Logout vs. when to just disconnect何时发送Logout与仅断开连接
一般情况下,一个Logout消息应在关闭一个连接前发送。如果这个Logout消息是源于一个错误条件,Logout的Text域应提供错误原因的描述,为远端FIX系统提供问题诊断的操作支持。这里有2个例外,推荐不发送Logout消息:
1、在登陆阶段,如果会话发起者的SenderCompID,TargetCompID或IP其中一个无效时,推荐立即终止会话,不发送Logout消息。这个登陆尝试有可能使一个未经授权的破坏系统的未认证尝试,因此,企业不希望泄露其FIX系统的任何信息,如,哪个SenderCompID,TargetCompID是有效的,或所支持的FIX版本。
2、在登陆阶段,当一个有效的FIX会话已经被一个企业使用时,该企业的第2次连接尝试的Logon消息被接受时,推荐会话接收者立即中断该第2次连接尝试,不发送Logout消息。发送一个Logout消息将冒着妨碍和影响当前FIX连接的风险。例如:在一些FIX实现系统中,发送一个Logout消息可能会消耗一个序列号,这样将会导致在一个已经建立的FIX会话中的序列号混乱。
在其他情况下,如果发送一个Logout消息不产生风险和安全冲突,Logout消息应随同描述信息一起发送。
6.3 When to send a Session Reject vs. when to ignore the message 何时发送会话驳回与何时忽略消息
以下内容从FIX协议规范中的Reject消息定义中摘抄:
注意:接收程序应忽略任何文本混乱,不能被解析以及数据完整性检查失败的消息。处理下一个右下的FIX消息将导致检测到一个序列号间隙并产生一个重传请求消息Resend Request。这种情况下,FIX引擎应包含识别重传无限循环的逻辑。
FIX协议采取乐观的观点。它假设一个混乱的消息是由于传输中出现的错误,而不是FIX系统的问题。因此,如果发送一个重传请求消息(Resend Request),该混乱消息将被正确得重传。如果一个消息没被认为是混乱的,那么,推荐发送一个会话级驳回消息。
6.4 What constitutes a garbled message 什么样的情况认为是一个混乱消息
1.         BeginString(tag#8)不是一个消息中的第一个tag或不是8=FIXT.n.m.的格式。
2.         BogyLength(tag#9)不是一个消息中的第二个tag或没有包含正确的字节数。
3.         MsgType(tag#35)不是一个消息中的第三个tag。
4.         Checksum(tag#10)不适最后一个tag或没有包含正确的值。
如果丢失MsgSeqNum(tag#34),一个Logout消息将被发送以终止FIX连接。因为这种情况意味着一个严重的应用程序错误。
6.5 FIX Session-level State Matrix FIX会话层状态举证
Precedence
次序
State
状体
Initiator
发起者
Acceptor
接收者
Descriptioin
描述
1 断开 当天未连接 Y Y 当前处于断开状态,当日未进行连接尝试。没有MsgSeqNum被使用(下一个当日的连接的MsgSeqNum值为1)。
2 断开 当日开始连接 Y Y 当前处于断开状态,尝试建立当日连接,这样,MsgSeqNum开始被消耗(下一个当日连接时,MsgSeqNum将从其(last+1)开始)
3 检测到网络连接的中断 Y Y 处于连接状态时,检测到一个网络连接中断(如TCP socket关闭)。断开网络连接并关闭该会话的配置。
4 等待连接 N Y 会话登陆消息接收者等待对端的连接。
5 初始话(发起)连接 Y N 会话登陆消息发起者同对端建立连接。
6 网络连接建立 Y Y 双方建立网络连接。
7 发送Logon发起消息 Y N
会话登陆发起者发送Logon
消息。
***异常:24小时会话
8 收到Logon发起消息 N Y
会话登陆接收者收到对端的Logon消息
***异常:24小时会话
9 Logon发起消息响应 N Y 会话登陆接收者使用Logon消息与对端握手,响应对端Logon消息。
10 处理ResendRequest Y Y 接收和响应对端发送的对消息的ResendRequeset消息,和(或)对MsgSeqNum所请求范围的SequenceReset-Gap Fill消息。修改以驳回接收到的MsgSeqNum小于LastSeqNum的Resend Request消息。
11 收到MsgSeqNum过大 Y Y 从对端接收到过大的MsgSeqNum,将消息排队暂存,发送ResendRequest消息
12 等待/处理ResendRequest响应 Y Y 处理请求的MsgSeqNum请求的、PossDupFlag=’Y’的消息,和/或从对端进行的SequenceRset-Gap Fill消息。将MsgSeqNu过高的接收消息排队暂存。
13 在实践间隔后未收到消息 Y Y 没有非混乱消息在HeartBeatInt+响应时间内被接收,发送TestRequest消息。
14 等待/处理TestRequest消息响应 Y Y 处理接收消息。当接收到非混乱消息后,复位心跳间隔时间。
15 接收Logout消息 Y Y 从对端接收到发起注销/连接断开的Logout消息。如果MsgSeqNum过高,发送RsendRequest。如果发送,等待一定周期,以完成ResendRequest的响应处理。注意,依据Logout的原因,对端可能不能执行该请求。 发送Logout消息作为响应并等待一定时间让对端断开网络连接。注意,对端可能发送ResendRequest消息,如果Logout响应消息的MsgSeqNum过高并重新发起Logout操作。
16 发起Logout处理 Y Y 识别优雅断开连接的条件和原因(如:日终,多个未响应的TestRequest消息发送后,MsgSeqNum过高等)。发送Logout效益给对端。等待一个时间周期以接收Logout响应。在这期间,如有可能,处理新接收的消息和/或ResendRequest。注意,一些注销/终止条件(如数据库/消息存储失败),可能要求紧接在初始沪Logout消息发送后立即止网络连接。断开该会话的网络连接并关闭该会配置。
17 活动/正常会话 Y Y 网络连接建立后,Logon消息成果交换完成,接收和发送的MsgSeqNum都是所期望的顺序,并且Heartbeat 或其他消息在(HeartBeatInt +响应周期)内被接收。
18 等待Logon确认 Y N 会话发起者等待会话接收者发送Logon确认消息。
6.6 FIX Logon Process State Transition Diagram     FIX登陆消息处理状态转换图
Session Initiator(e.g. buyside)Action 会话发起者(如,买方)行为
Session Acceptor(e.g. sellside)Action会话接收者(如,卖方)行为
Session Initiator(e.g.buyside)State会话发起者(如,买方)状态
Session Acceptor(e.g. sellside)State会话接收者(如,卖方)状态
开始  
未连接-当日未连接
未连接-当日连接
等待连接
连接  
发起连接
(可能)检测到网络连接中断
等待连接
  接受连接 建立网络连接 建立网络连接
发起登陆
  发送发起登陆消息Logout 建立网络连接
  收到发起登陆消息Logout 发送发起登陆消息Logout 收到发起登陆消息Logout
  发送发起登陆消息响应 发送发起登陆消息Logout
发起Logon的响应
 
(可能)发起 Logout处理
 
(可能)接收到的MsgSeqNum过高
  (可能)发送ResendRequest  
发起Logon响应
 
(可能)接收到的MsgSeqNum过高
接收发起登陆消息的响应  
(可能)活动/正常的会话
(可能)发起 Logout处理(如,MsgSeqNum过高)
发起Logon的响应
 
(可能)发送RsendRequest  
(可能)活动/正常的会话
(可能)接收的MsgSeqNum过高
(可能)活动/正常的会话
(可能)处理ResendRequest
    活动/正常的会话 活动/正常的会话
6.7 FIX Logout Process State Transition Diagram    FIX Logout处理状态转换图
Logout Initiator: Action
Logout发起者行为ie
Logout Acceptor Action
Logout接收者行为
Logout Initiator State
Logout发起者状态
Logout Acceptor State
Logout接收者状态
开始  
1.         活动/正常的会话
2.         没有在时间间隔内收到消息
3.         等待/处理响应TestRequest
 
       
 
原文转自:http://blog.csdn.net/songzhang/article/details/1812824

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值