项目作者: kpavlov

项目描述 :
FIX Protocol Support for Netty
高级语言: Java
项目地址: git://github.com/kpavlov/fixio.git
创建时间: 2013-07-31T18:17:09Z
项目社区:https://github.com/kpavlov/fixio

开源协议:Apache License 2.0

下载


fixio - FIX Protocol Support for Netty Java CI with Maven Codacy Badge

Overview

Why One More FIX Protocol API

This API is intended to replace well known QuickFIX/J in high-frequency trading scenarios.

Design goals

  1. Implement FIX Protocol Java API with as low memory footprint as possible in order to eliminate unnecessary GC overhead,
    thus improving overall application performance under high load.
  2. Provide FIX Protocol Codecs for Netty, to make it possible to get rid of Apache Mina which is used by QuickFIX/J as a transport layer.
  3. Avoid using expensive operations:
    • Avoid synchronization.
    • Replace BigDecimals with custom Fixed Point Number implementation for financial data.
    • Reuse java.util.Calendar and java.util.TimeZone instances.

The API has a number of limitations, so it may be not suitable for any FIX application.

Limitations

  1. Logon message encryption is not supported. EncryptMethod(98)=0
  2. XmlData is not supported
  3. Message encodings other than US-ASCII are not supported.
  4. Message resending and resend requests are not supported.

Performance

Currently fixio can beat QuickFix performance in simple scenario. See performance comparison.

Getting Started

  1. Download ZIP archive or clone/fork the repository.
  2. Build and install project artifacts to your local maven repository:
    mvn clean install
  3. Add the dependency to your project
  1. <dependency>
  2. <groupId>kpavlov.fixio</groupId>
  3. <artifactId>core</artifactId>
  4. <version>1.2</version>
  5. </dependency>

You’ll also need a slf4j API implementation at runtime, so please add appropriate dependency, e.g.:

  1. <dependency>
  2. <groupId>org.slf4j</groupId>
  3. <artifactId>slf4j-simple</artifactId>
  4. <version>1.7.25</version>
  5. <scope>runtime</scope>
  6. <optional>true</optional>
  7. </dependency>

Examples

You may find working example of client
and server applications in module “examples”.

I recommend running server with Concurrent Mark Sweep Collector enabled: -XX:+UseConcMarkSweepGC
and increased Survivor spaces (-XX:SurvivorRatio=4).

Writing Simple FIX Client

To create a simple FIX client you need to:

  1. Implement FixApplication.
    You may extend FixApplicationAdapter as a quick start.

  2. Create an instance of FixClient and initialize if with FixApplication you’ve just created and classpath reference to FIX session settings property file.

  3. Invoke FixClient.connect(host, port) to initiate connection.
    Method connect(...) returns a ChannelFeature which which will be notified when a channel is closed,
    so you may invoke the method sync() on it if you wish to wait for connection to be closed.

  1. FixApplication app = new FixApplicationAdapter();
  2. client = new FixClient(app);
  3. // set settings file location related to classpath
  4. client.setSettingsResource("/client.properties");
  5. // connect to specified host and port
  6. ChannelFeature closeFeature = client.connect("localhost", 10201);
  7. // wait until FIX Session is closed
  8. closeFeature.sync();
  9. // Shutdown FIX client
  10. client.disconnect();

SSL Support for Client

You may set a property ssl=true in client.properties file.

Or configure FixSessionSettingsProvider by hand. See FixSessionSettingsProvider.Params.SSL.

You may find more information in User Guide and
Wiki pages.