6个版本
0.2.2 | 2024年4月22日 |
---|---|
0.2.1 | 2024年2月9日 |
0.1.2 | 2024年1月18日 |
#1085 in 数据库接口
每月 374 次下载
315KB
8K SLoC
包含 (ELF 可执行文件/库, 1MB) executor/executor
ForgeFIX
ForgeFIX是一个针对买方的FIX 4.2客户端库,用Rust编写。ForgeFIX针对买方公司与经纪人和交易所连接以通信订单和成交进行了优化。
方法
ForgeFIX是一个“有偏见的”客户端。主要表达的观点是FIX协议的几个部分是遗迹性的并且/或者很少使用。请参阅以下“未实现”部分以获取更多信息。
ForgeFIX代码中体现的其他观点包括
- 安全语言 -- 在生产环境中,应使用安全语言编写关键代码以最大限度地减少崩溃、内存损坏和安全问题。由于安全性、强大的社区和优秀的编译器,选择了Rust。
- 最小分配 -- ForgeFIX致力于在发送和接收消息的关键路径上尽可能少地进行动态分配,以最大限度地提高吞吐量和延迟。
- 可读代码 -- 优先考虑可读代码而不是聪明代码。仅在需要实现所需功能或由性能分析证明合理时引入复杂性。
- 适用于实时交易 -- ForgeFIX具有足够的特性来处理大多数实时交易流量,支持所有会话管理功能、消息类型和字段。
- 按需消息解析 -- 延迟解析传入消息,直到客户端代码请求。
功能
- FIX 4.2 -- 对FIX 4.2的完整消息和字段支持。会话管理,包括序列号协商和消息重传。
- 数据库支持的消息存储 -- 所有有效和已处理的消息都存储在本地数据库中(目前为Sqlite),以支持消息重传和离线审计和查询。
- 文件日志 –- 所有发送的消息以及所有接收到的消息(无论是否有效),都被写入日志文件,以供离线审计。
- 异步Rust API -- 与Tokio运行时兼容的异步API
- C API -- 用于C代码的API,或通过FFI与许多其他(Python、Go等)代码一起使用
- 测试套件 -- 对ForgeFIX运行多个测试用例以确认符合FIX 4.2规范。
状态
ForgeFIX功能完整,已在生产环境中用于携带实时订单。然而,请将其视为beta版本,直到发布版本1.0。在1.0之前,API更改可能导致向前和向后不兼容。
未实现
以下项目出于简化性能的考虑尚未实现。以下列表是根据与经纪人及交易所连接的买方客户的需求感知创建的,但并非一成不变。如果您对这些功能之一有使用案例,请使用“功能请求”模板提出问题。
- 除了4.2以外的FIX协议版本 -- 尽管4.x有五个修订版,还有FIX 5.0和几个其他变体,但绝大多数通信订单的连接都使用FIX 4.2。
- 消息加密 -- FIX协议允许对消息体进行加密。在实践中,这很少使用。更常见的是信道加密(如VPN)、私有网络链接或两者兼具。
- 消息体验证 -- 买方公司通常会向对手方发送订单,并接收“执行报告”。一个格式错误的订单消息会被对手方拒绝,并获得一个拒绝(3)或执行报告(8),表示错误。假设订单格式良好,经纪人可能会根据双方同意的FIX协议变体,回复一个格式错误的执行报告。拒绝这个执行报告不会有任何好处。买方公司应尽力处理执行报告,并与对手方在链外解决验证问题。
- 自动重连 -- FIX会话的一个特性是可以生存多次TCP断开连接,无论是预期的还是意外的。有了自动重连功能,ForgeFIX将能够优雅地处理TCP断开连接,无需客户端代码的干预。然而,在ForgeFIX中,TCP断开连接目前被视为一个错误,并且需要手动重连到FIX会话。
依赖项
~30–41MB
~675K SLoC