使用 Python QuickFIX 通过 Stunnel 连接

使用 python quickfix 通过 stunnel 连接

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

1. Stunnel 配置

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

CAfile=./Roots.crtcert=./cert.pfxclient=yesverify=1sslVersion = TLSv1.2options = NO_SSLv2options = NO_SSLv3debug=7foreground=yesoutput=./stunnel.log[SESSION]accept=8080connect=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=initiatorLogonTimeout=10ReconnectInterval=30FileLogPath=./Logs/[SESSION]BeginString=FIXT.1.1DefaultApplVerID=9SenderCompID=EXAMPLE_COMP_SENDERTargetCompID=EXAMPLE_COMP_TARGETStartTime=00:00:00EndTime=00:00:00HeartBtInt=30CheckLatency=NMaxLatency=240SocketConnectPort=8080SocketConnectHost=127.0.0.1UseDataDictionary=YTransportDataDictionary=./FIX50SP2.xmlFileStorePath=./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 代码示例:

import quickfix as fixclass 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")        returnconfig_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。

运行步骤:

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

4. 调试技巧与问题排查

问题:Stunnel 连接立即断开。

可能原因:

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

调试方法:

检查日志: 查看 Stunnel 和 QuickFIX 的日志文件,查找错误信息。调整心跳间隔: 增加 QuickFIX 配置文件中的 HeartBtInt 值。检查配置: 仔细检查 Stunnel 和 QuickFIX 的配置文件,确保参数正确。网络测试: 使用 ping 或 telnet 命令测试网络连接是否正常。证书验证: 使用 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 连接的详细内容,更多请关注创想鸟其它相关文章!

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。
如发现本站有涉嫌抄袭侵权/违法违规的内容, 请发送邮件至 chuangxiangniao@163.com 举报,一经查实,本站将立刻删除。
发布者:程序猿,转转请注明出处:https://www.chuangxiangniao.com/p/1374700.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
Pandas 数据框子集行更新:高效赋值与常见陷阱解析
上一篇 2025年12月14日 14:22:55
使用 SQLAlchemy 查询时保持对象定义并进行多列选择
下一篇 2025年12月14日 14:23:10

相关推荐

  • 平安证券佣金能否调整_平安证券股票交易佣金调整方法

    可通过联系客户经理协商、APP自助申请、参与优惠活动、提升账户贡献度或重新开立低佣金账户等方式降低平安证券佣金费率。 如果您在使用平安证券进行股票交易时,发现当前的佣金费率较高,希望降低交易成本,则可以通过多种途径申请调整。以下是针对已有账户调低佣金以及新开账户获取优惠费率的具体操作方法: 一、联系…

    2026年9月3日
    000
  • Cortana如何更改唤醒词_Cortana唤醒词自定义设置教程

    可借助PowerToys或第三方工具实现Cortana自定义唤醒。首先确认系统语音唤醒已开启,由于Windows不支持直接修改唤醒词,可通过PowerToys映射快捷键结合语音识别训练新唤醒词,或使用VoiceAttack等工具创建自定义命令并绑定Cortana触发快捷键,实现间接唤醒,但需注意语音…

    2026年9月3日
    000
  • win10怎么查看端口是否被占用_win10网络端口占用情况查询方法

    可通过命令提示符、资源监视器、PowerShell或第三方工具检查端口占用情况。2. 使用netstat -ano命令可查端口及对应PID,结合tasklist定位进程。3. 资源监视器提供图形界面,在“网络”选项卡中查看监听端口及进程名称。4. PowerShell使用Get-NetTCPConn…

    2026年9月3日
    100
  • win10怎么解决字体显示模糊_win10高分屏字体模糊问题调整方法

    调整系统缩放比例、设置程序高DPI兼容性及修改注册表启用旧版DPI缩放可解决Windows 10高分屏字体模糊问题。 如果您在使用高分辨率屏幕的Windows 10设备时,发现系统或应用程序字体显示模糊,这通常是由于DPI缩放设置与应用程序兼容性不匹配导致的。以下是解决此问题的具体方法。 本文运行环…

    2026年9月3日
    000
  • b站怎么看被删除的视频或评论_B站已失效内容查找与恢复技巧

    答案:可通过个人主页动态查看已删评论。进入“我的”-“动态”-“我发表的评论”,被删除的评论会显示“该评论已删除”,但仍可见发布时间与内容片段,适用于追溯作者或系统删除的记录。 如果您在B站浏览内容时发现曾经发布的评论或观看过的视频显示为“已删除”或“不存在”,可能是由于作者主动移除、系统审核或账号…

    2026年9月3日
    000
  • win11麦克风没有声音怎么解决_win11麦克风无声音故障排查教程

    首先检查麦克风权限设置,确保系统和应用允许访问;接着确认硬件连接正常且未静音;然后在声音设置中将麦克风设为默认输入设备;运行音频疑难解答工具自动修复问题;最后更新或重装音频驱动程序以解决驱动异常。 如果您在使用Windows 11时发现麦克风没有声音,可能是由于权限设置、设备连接或驱动问题导致系统无…

    2026年9月3日
    000
  • 平安好车主怎么查询车辆违章_平安好车主查询车辆违章详细方法

    可通过平安好车主APP查询车辆违章记录。①首页点击“更多”进入服务列表,在“车生活”栏目选择“查违章”并输入车牌号、车架号后六位查询;②在“我的”页面点击右上角设置图标,进入“查违章”选项,填写城市、车牌号、发动机号后四位及车架号后六位提交查询;③首页顶部搜索框输入“查违章”,从结果中选择服务项,按…

    2026年9月3日
    100
  • win8如何彻底关闭休眠功能_win8完全关闭系统休眠文件方法

    先通过电源选项禁用休眠,再使用管理员命令提示符执行powercfg /h off命令,可彻底关闭休眠功能并删除hiberfil.sys文件释放磁盘空间。 如果您希望提升Windows 8系统的启动速度或释放被系统休眠文件占用的磁盘空间,可能需要彻底关闭休眠功能并删除对应的休眠文件。以下是实现该目标的…

    2026年9月3日
    100
  • win10怎么切换输入法_win10切换输入法的快捷键设置

    1、使用Alt+Shift可循环切换输入法,任务栏语言图标点击后也可手动选择;2、通过设置中的“按键设置”可自定义切换快捷键;3、添加或删除键盘可优化输入法列表。 如果您在使用Windows 10系统时需要频繁切换不同的语言输入方式,但不清楚如何快速完成切换或自定义快捷键,可能会降低操作效率。以下是…

    2026年9月3日
    100
  • 京东双11国补手机数码能用吗_京东双11国补手机数码优惠解读

    京东双11期间国补可用且可叠加优惠,先通过搜索“数码900”或“手机900”领取资格,享受售价15%、最高500元补贴,每人每类商品限享一次;结算时可与店铺优惠、平台红包及“红包900”等多重优惠叠加使用,进一步降低购机成本。 如果您计划在京东双11期间购买手机或数码产品,可能会关心国家补贴(国补)…

    2026年9月3日
    000
  • 蛋仔派对蛋仔碰碰棋什么时候上线-蛋仔派对蛋仔碰碰棋上线时间

    蛋仔派对蛋仔碰碰棋上线时间1、原定的“蛋仔碰碰棋”全明星测试计划结束时间虽未明确说明,但公告指出测试已延长至2025年7月13日23:59:59停服。 2、在《蛋仔派对》与Apple授权门店的联动宣传中,多次提及「蛋仔碰碰棋」将“正式登场”,但并未公布确切上线日期。 3、根据测试结束时间(7月13日…

    2026年9月3日
    000
  • qq浏览器出现“aw, snap!”崩溃页面怎么办_qq浏览器崩溃错误修复方案

    1、使用QQ浏览器内置的一键修复工具可自动解决页面崩溃问题;2、清除全部时间范围的缓存与Cookie数据以排除文件冲突;3、关闭所有扩展并结束高耗能后台程序释放内存;4、重置浏览器设置恢复默认配置,排除错误参数影响。 如果您在使用QQ浏览器时遇到“Aw, Snap!”错误,导致网页无法正常加载并显示…

    2026年9月3日
    000
  • 如何利用Heading、Pitch、Roll数据实现图像的三维旋转联动?

    利用航向角、俯仰角和滚转角实现图像三维旋转联动 本文介绍如何利用heading(航向角)、pitch(俯仰角)、roll(滚转角)这三个姿态角数据,实时驱动图像旋转,模拟三维场景中物体姿态变化的视觉效果。下图展示了该功能的需求:根据后台提供的heading、pitch、roll数据,动态更新图像姿态…

    2026年9月3日
    000
  • win8怎么连接隐藏的wifi win8手动添加并连接隐藏WiFi网络教程

    要连接未显示的Wi-Fi网络,需手动添加隐藏网络。首先通过“网络和共享中心”选择“手动连接到无线网络”,输入正确的SSID、安全类型、加密方式及密码,并勾选“即使网络未广播也进行连接”;或通过控制面板进入“无线网络配置”选项卡,添加SSID并启用“即使是非广播网络”选项,保存后系统将尝试连接。 如果…

    2026年9月3日
    000
  • win10夜灯模式打不开或灰色怎么办_Win10夜间模式无法开启问题解决方案

    如果您尝试在Windows 10系统中开启夜灯模式,却发现该功能无法打开或选项呈现灰色不可用状态,则可能是由于系统设置、驱动程序或第三方软件干扰所致。以下是解决此问题的步骤: 本文运行环境:Dell XPS 13,Windows 10 专业版。 一、检查显示驱动是否正常 夜灯模式依赖于显卡驱动正常工…

    2026年9月3日
    000
  • 快兔网盘网页版如何新建文件夹_快兔网盘网页版新建文件夹方法

    1、登录快兔网盘网页版后,通过顶部工具栏“新建”按钮选择“新建文件夹”并命名即可创建;2、在文件列表空白处右键,选择“新建文件夹”进行重命名操作;3、部分版本可在地址栏旁点击“+”号或“添加”图标,选择文件夹类型并输入名称完成创建。 如果您在使用快兔网盘网页版时需要整理文件,但找不到创建新文件夹的选…

    2026年9月3日
    000
  • ao3挑战赛怎么参加_ao3加入和发布同人挑战活动

    ao3挑战赛怎么参加_ao3加入和发布同人挑战活动ao3挑战赛怎么参加_ao3加入和发布同人挑战活动ao3挑战赛怎么参加_ao3加入和发布同人挑战活动ao3挑战赛怎么参加_ao3加入和发布同人挑战活动

    首先注册AO3账号并完善资料,接着通过Challenges模块查找或创建挑战活动,按规则报名后在规定时间内创作并上传标记正确的同人作品完成参与。 如果您想在Archive of Our Own(AO3)上参与或发起一项同人创作挑战活动,但不清楚具体流程和规则,可以通过以下方式完成操作。此类活动通常由…

    2026年9月3日 用户投稿
    000
  • Excel表格怎么分列_Excel文本分列功能使用方法详解

    Excel文本分列功能可将一列混合数据按分隔符或固定宽度拆分为多列。首先选中数据列,点击“数据”→“分列”,根据数据特点选择“分隔符号”或“固定宽度”。若使用分隔符号,勾选对应符号(如逗号、空格或手动输入顿号),预览拆分效果后设置各列数据格式并指定目标区域;若采用固定宽度,则在预览界面手动添加分列线…

    2026年9月3日
    400
  • win10怎么检查磁盘错误_win10磁盘错误检查与修复方法

    1、通过“此电脑”属性中的“工具”选项卡使用错误检查功能可快速修复文件系统逻辑错误;2、使用管理员权限运行命令提示符并输入“chkdsk C: /f /r”命令可深入扫描并修复磁盘错误及坏扇区;3、运行“sfc /scannow”命令可修复受损的系统核心文件以提升系统稳定性;4、通过“计算机管理”中…

    2026年9月3日
    000
  • win8兼容模式在哪里设置_win8程序兼容模式设置方法

    答案:通过兼容模式可解决旧版程序在Windows 8.1上无法运行的问题。具体方法包括手动设置兼容模式,选择如Windows 7等早期版本,并可勾选以管理员身份运行;或使用系统自带的兼容性疑难解答工具自动检测并应用最佳设置,最后测试程序是否正常启动。 如果您尝试在较新的Windows 8系统上运行旧…

    2026年9月3日
    000

发表回复

登录后才能评论
关注微信