This project demonstrates high performance FIX using Web and FIX protocols.
FIX Trading Community welcomes participation in this project by any interested parties.
For demonstration purposes, the project provides a simple order match engine and a trader client to inject orders.
Application messages convey FIX semantics. See FIX Application Level.
Two message encodings are provided:
Simple Binary Encoding, a FIX standard. The implementation is very low latency due to its use of native binary data types and deterministic message layouts controlled by templates.
JSON encoding is conducive to web UI development. It is not, however, considered low latency.
Message framing is performed by WebSocket protocol.
Sessions are initiated as an HTTP request to upgrade to WebSocket. WebSocket, an IETF protocol, provides two-way push communication, unlike HTTP itself.
Message delivery idempotency or recoverability is ensured by FIX Performance Session Layer semantics. FIXP is a FIX protocol.
WebSocket protocol runs over a TCP transport, which provides basic reliability of message delivery, and it uses Ping/Pong messages as keepalives.
As part of the initial HTTP contact, a TLS handshake negotiates cipher suites and performs authentication. The server is authenticated by a certificate.
- Use alternative encodings
- Enhanced client authentication
This project requires Java 10 or later. It should run on any platform for which the JVM is supported.
The project uses HTTPClient in module jdk.incubator.httpclient
that is distributed with the JDK. Since it is still an incubator module, the module and package names will definitely change in the future.
-
The server implementation of WebSocket is provided by Jetty.
-
JSON implementation is provided by Google's Gson library.
-
SBE code generation by Real-Logic's SBE tool.
The project is built with Maven version 3.0 or later.
© Copyright 2018 FIX Protocol Limited
Licensed under the Apache License, Version 2.0 (the "License"); you may not use this file except in compliance with the License. You may obtain a copy of the License at
http://www.apache.org/licenses/LICENSE-2.0
Unless required by applicable law or agreed to in writing, software distributed under the License is distributed on an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the License for the specific language governing permissions and limitations under the License.