GV

GeezerVison

The World Wide Web, restored to 800 pixels of glory.

Home|About|Gaming cabinet|Archives|How it works|Starter sites

On this site

  • Sign in
  • ActionsCI/CD and automation
  • CodespacesCloud development environments
  • All Features
  • Documentation
  • Training
  • Certifications
  • Build with Copilot
  • Customize Copilot
  • Integrations
  • Trending repos
  • GitHub Sponsors
  • Developer articles
  • Enterprises

This view

  • Original page
  • New address

GeezerVison is showing github.com — GitHub - robaho/cpp_fix_engine: High performance FIX engine in C++

BranchesTags
Open more actions menu

Latest commit

 

History

34 Commits
34 Commits

Folders and files

NameName
Last commit message
Last commit date
.gitignore
.gitignore
 
 
Makefile
Makefile
 
 
Makefile.gcc
Makefile.gcc
 
 
README.md
README.md
 
 
compile_flags.txt
compile_flags.txt
 
 
fix_engine.cpp
fix_engine.cpp
 
 
fix_engine.h
fix_engine.h
 
 
fix_engine_test.cpp
fix_engine_test.cpp
 
 
massquote.sh
massquote.sh
 
 
massquote_bench.sh
massquote_bench.sh
 
 
msg_logon.h
msg_logon.h
 
 
msg_logout.h
msg_logout.h
 
 
msg_massquote.h
msg_massquote.h
 
 
msg_orders.h
msg_orders.h
 
 
msg_reject.h
msg_reject.h
 
 
park_unpark.h
park_unpark.h
 
 
poller.h
poller.h
 
 
profile.json
profile.json
 
 
sample_client.cpp
sample_client.cpp
 
 
sample_sendorder.cpp
sample_sendorder.cpp
 
 
sample_server.cpp
sample_server.cpp
 
 
socketbuf.h
socketbuf.h
 
 

Repository files navigation

Summary

This is a C++ implementation of a FIX protocol engine.

With the addition of some important test cases this has moved closer to production ready but it still under active development. It is designed for ulta-high performance scenarios, so it won't support FIX message persistence/replay in the early releases. All sequence numbers are reset to 1 during connection.

It uses cpp_fixed to perform fixed decimal point integer math. It uses cpp_fix_codec to perform low-level FIX message encoding/decoding.

Building

Requires:

  • cpp_fixed
  • cpp_fix_codec to be available and built at the same directory level.

The project builds by default using make and CLang. There is a Makefile.gcc for building using GCC.

Design

The engine uses a thread per client in the server.

Errata

The fix messages declared in the project are samples for demonstration purposes. A system would need to build/parse messages according to the providers specifications.

Performance

Using a 4 GHz Quad-Core Intel Core i7, and the Boost Fibers for server and clients.

160k+ round-trip quote messages (single double-sided qoute) + ack per second on localhost. (ping pong i.e. wait for ack, not streaming).

$bin/sample_client localhost -bench 75
round-trip 811924 quotes, usec per quote 6.16218, quotes per sec 162280

Over-the-network timings coming soon.

Design notes

There are two main branches: thread_per_session and fibers. The latter uses Boost Fibers, and the former a platform thread per FIX session.

The main branch uses fibers as the performance was much better.

The Initiator uses a platform thread by default, but can be configured to use fibers by passing a Poller to the constructor. See the sample_client and -bench support for using multiple FIX initiators sharing Boost Fibers.

Testing

  • use make run_tests to run the unit tests.
  • use bin/sample_server to launch the server process.
  • use bin/sample_client <host> <symbol> to mass quote the symbol against the server.
  • use bin/sample_client <host> -bench <count> to mass quote <quote> symbols against the server.

About

High performance FIX engine in C++

Topics

boostboost-librariescppfixfix-enginefix-protocol

Resources

Readme
Activity

Stars

6 stars

Watchers

1 watching

Forks

3 forks
Report repository

Releases

Packages

Contributors

Languages

You are visitor 01402503 — GeezerVison does not store the pages you look up.
Best viewed with Netscape Navigator 4.7 or Internet Explorer 6 at 800×600. No cookies required.