使用 Python QuickFIX 通过 Stunnel 连接

聖光之護
发布: 2025-09-30 18:28:38
原创
394人浏览过

使用 python quickfix 通过 stunnel 连接

本文档旨在指导开发者如何使用 Python QuickFIX 库通过 Stunnel 建立安全的 FIX (Financial Information eXchange) 连接。我们将详细介绍 Stunnel 的配置,QuickFIX 应用程序的设置,并提供调试技巧,以解决连接断开等常见问题,确保 FIX 消息的可靠传输。

1. Stunnel 配置

Stunnel 用于创建客户端和服务器之间的加密连接。以下是一个 Stunnel 客户端配置示例:

CAfile=./Roots.crt
cert=./cert.pfx
client=yes
verify=1
sslVersion = TLSv1.2
options = NO_SSLv2
options = NO_SSLv3
debug=7
foreground=yes
output=./stunnel.log
[SESSION]
accept=8080
connect=EXAMPLE_URL:EXAMPLE_IP
登录后复制

配置项说明:

  • CAfile: CA 证书文件的路径,用于验证服务器证书。
  • cert: 客户端证书和私钥文件的路径。
  • client: 设置为 yes 表示 Stunnel 作为客户端运行。
  • verify: 设置证书验证级别。 1 表示验证服务器证书。
  • sslVersion: 指定使用的 TLS 版本。推荐使用 TLSv1.2 或更高版本。
  • options: 禁用不安全的 SSL 协议版本。
  • debug: 设置调试级别。 7 为最高级别,提供最详细的日志信息。
  • foreground: 使 Stunnel 在前台运行,方便查看日志。
  • output: 指定日志文件的路径。
  • accept: Stunnel 监听的本地端口
  • connect: 要连接的远程服务器地址和端口。

注意事项:

立即学习Python免费学习笔记(深入)”;

  • 确保证书文件的权限设置正确,避免出现 "Insecure file permissions" 错误。
  • 使用 checkHost 或 checkIP 配置项来限制信任的证书,提高安全性。
  • 根据实际情况调整调试级别,以便获取足够的日志信息进行问题排查。

2. QuickFIX 配置

QuickFIX 应用程序需要配置连接参数,例如目标服务器地址、端口、会话 ID 等。以下是一个 QuickFIX Initiator 配置文件示例:

[DEFAULT]
ConnectionType=initiator
LogonTimeout=10
ReconnectInterval=30
FileLogPath=./Logs/

[SESSION]
BeginString=FIXT.1.1
DefaultApplVerID=9
SenderCompID=EXAMPLE_COMP_SENDER
TargetCompID=EXAMPLE_COMP_TARGET
StartTime=00:00:00
EndTime=00:00:00
HeartBtInt=30
CheckLatency=N
MaxLatency=240
SocketConnectPort=8080
SocketConnectHost=127.0.0.1
UseDataDictionary=Y
TransportDataDictionary=./FIX50SP2.xml
FileStorePath=./Sessions/
登录后复制

配置项说明:

  • ConnectionType: 设置为 initiator 表示应用程序作为连接发起方。
  • LogonTimeout: 登录超时时间,单位为秒。
  • ReconnectInterval: 重新连接的间隔时间,单位为秒。
  • FileLogPath: 日志文件存放路径。
  • BeginString: FIX 协议版本。
  • DefaultApplVerID: 默认的应用版本 ID。
  • SenderCompID: 发送方 CompID。
  • TargetCompID: 接收方 CompID。
  • StartTimeEndTime: 会话有效时间段。
  • HeartBtInt: 心跳间隔,单位为秒。
  • CheckLatency: 是否检查延迟。
  • MaxLatency: 最大延迟,单位为秒。
  • SocketConnectPort: 连接的本地 Stunnel 监听端口(Stunnel 配置中的 accept 端口)。
  • SocketConnectHost: 连接的本地 Stunnel 监听地址,通常为 127.0.0.1。
  • UseDataDictionary: 是否使用数据字典。
  • TransportDataDictionary: 数据字典文件的路径。
  • FileStorePath: 会话文件存放路径。

注意事项:

立即学习Python免费学习笔记(深入)”;

  • 确保 SocketConnectPort 和 SocketConnectHost 与 Stunnel 的配置一致,即连接到 Stunnel 监听的端口和地址。
  • 根据实际情况调整心跳间隔,避免因心跳超时导致连接断开。
  • 检查数据字典文件是否与 FIX 协议版本匹配。

3. Python QuickFIX 代码示例

以下是一个简单的 Python QuickFIX Initiator 代码示例:

通义视频
通义视频

通义万相AI视频生成工具

通义视频 70
查看详情 通义视频
import quickfix as fix

class Application(fix.Application):
    orderID = 0
    execID = 0
    def gen_ord_id(self):
        print("gen_ord_id")
        return 1

    def onCreate(self, sessionID):
        print("onCreate : Session (%s)" % sessionID.toString())
        return

    def onLogon(self, sessionID):
        self.sessionID = sessionID
        print("Successful Logon to session '%s'." % sessionID.toString())
        return

    def onLogout(self, sessionID):
        print("onLogout")
        return

    def toAdmin(self, sessionID, message):
        print("toAdmin")
        return

    def fromAdmin(self, sessionID, message):
        print("fromAdmin")
        return

    def toApp(self, sessionID, message):
        print("Recieved the following message: %s" % message.toString())
        return

    def fromApp(self, message, sessionID):
        print("fromApp")
        return


config_file = "./initiator.cfg"
settings = fix.SessionSettings(config_file)
application = Application()
storeFactory = fix.FileStoreFactory(settings)
logFactory = fix.FileLogFactory(settings)
initiator = fix.SocketInitiator(application, storeFactory, settings, logFactory)
initiator.start()
登录后复制

代码说明:

  • Application 类继承自 fix.Application,用于处理 FIX 消息。
  • onCreate、onLogon、onLogout 等方法是 FIX 应用程序的回调函数,用于处理会话事件。
  • toAdmin 和 fromAdmin 方法用于处理管理消息。
  • toApp 和 fromApp 方法用于处理应用消息。
  • fix.SessionSettings 用于加载配置文件。
  • fix.FileStoreFactory 用于创建消息存储工厂。
  • fix.FileLogFactory 用于创建日志工厂。
  • fix.SocketInitiator 用于创建 Socket Initiator。
  • initiator.start() 启动 Initiator。

运行步骤:

  1. 保存上述代码为 test.py。
  2. 创建 initiator.cfg 文件,并配置相应的参数。
  3. 运行 python test.py。

4. 调试技巧与问题排查

问题:Stunnel 连接立即断开。

可能原因:

  • 心跳超时: 如果 QuickFIX 应用程序在指定的心跳间隔内没有发送或接收任何消息,服务器可能会断开连接。
  • 配置错误: Stunnel 或 QuickFIX 配置文件中的参数可能不正确。
  • 网络问题 网络连接不稳定或存在防火墙等问题。
  • 证书问题: 证书配置不正确或证书已过期。

调试方法:

  1. 检查日志: 查看 Stunnel 和 QuickFIX 的日志文件,查找错误信息。
  2. 调整心跳间隔: 增加 QuickFIX 配置文件中的 HeartBtInt 值。
  3. 检查配置: 仔细检查 Stunnel 和 QuickFIX 的配置文件,确保参数正确。
  4. 网络测试: 使用 ping 或 telnet 命令测试网络连接是否正常。
  5. 证书验证: 使用 OpenSSL 命令验证证书是否有效。例如:openssl verify -CAfile Roots.crt cert.pem

发送心跳请求:

QuickFIX 会自动处理心跳消息。如果需要手动发送心跳请求,可以创建一个 Heartbeat 消息并发送。例如:

import quickfix as fix

# ... (省略 Application 类的定义)

    def onLogon(self, sessionID):
        self.sessionID = sessionID
        print("Successful Logon to session '%s'." % sessionID.toString())
        # 发送心跳请求
        heartbeat = fix.Heartbeat()
        fix.Session.sendToTarget(heartbeat, sessionID)
        return
登录后复制

总结:

通过正确配置 Stunnel 和 QuickFIX,并结合调试技巧,可以成功建立安全的 FIX 连接。仔细检查日志信息,并根据实际情况调整配置参数,是解决问题的关键。

以上就是使用 Python QuickFIX 通过 Stunnel 连接的详细内容,更多请关注php中文网其它相关文章!

最佳 Windows 性能的顶级免费优化软件
最佳 Windows 性能的顶级免费优化软件

每个人都需要一台速度更快、更稳定的 PC。随着时间的推移,垃圾文件、旧注册表数据和不必要的后台进程会占用资源并降低性能。幸运的是,许多工具可以让 Windows 保持平稳运行。

下载
来源:php中文网
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系admin@php.cn
最新问题
热门推荐
开源免费商场系统广告
热门教程
更多>
最新下载
更多>
网站特效
网站源码
网站素材
前端模板
关于我们 免责申明 举报中心 意见反馈 讲师合作 广告合作 最新更新 English
php中文网:公益在线php培训,帮助PHP学习者快速成长!
关注服务号 技术交流群
PHP中文网订阅号
每天精选资源文章推送
PHP中文网APP
随时随地碎片化学习

Copyright 2014-2025 https://www.php.cn/ All Rights Reserved | php.cn | 湘ICP备2023035733号