{"id":15523958,"url":"https://github.com/kpavlov/fixio","last_synced_at":"2025-09-02T09:30:40.823Z","repository":{"id":9814875,"uuid":"11797725","full_name":"kpavlov/fixio","owner":"kpavlov","description":"FIX Protocol Support for Netty","archived":false,"fork":false,"pushed_at":"2024-04-20T20:48:25.000Z","size":1152,"stargazers_count":101,"open_issues_count":17,"forks_count":50,"subscribers_count":18,"default_branch":"master","last_synced_at":"2024-05-02T06:01:24.678Z","etag":null,"topics":["fixprotocol","netty","tcp-client","tcp-server"],"latest_commit_sha":null,"homepage":"","language":"Java","has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":"apache-2.0","status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/kpavlov.png","metadata":{"files":{"readme":"README.md","changelog":null,"contributing":null,"funding":null,"license":"LICENSE","code_of_conduct":null,"threat_model":null,"audit":null,"citation":null,"codeowners":null,"security":null,"support":null,"governance":null,"roadmap":null,"authors":null,"dei":null,"publiccode":null,"codemeta":null}},"created_at":"2013-07-31T18:17:09.000Z","updated_at":"2024-05-06T14:30:52.767Z","dependencies_parsed_at":"2024-03-23T21:31:41.594Z","dependency_job_id":"3f0ab444-72e2-41e7-9b0d-470ea6fb3485","html_url":"https://github.com/kpavlov/fixio","commit_stats":null,"previous_names":[],"tags_count":2,"template":false,"template_full_name":null,"repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/kpavlov%2Ffixio","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/kpavlov%2Ffixio/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/kpavlov%2Ffixio/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/kpavlov%2Ffixio/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/kpavlov","download_url":"https://codeload.github.com/kpavlov/fixio/tar.gz/refs/heads/master","host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":231768657,"owners_count":18423787,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2022-07-04T15:15:14.044Z","host_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub","repositories_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories","repository_names_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repository_names","owners_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners"}},"keywords":["fixprotocol","netty","tcp-client","tcp-server"],"created_at":"2024-10-02T10:48:11.034Z","updated_at":"2024-12-29T17:37:36.145Z","avatar_url":"https://github.com/kpavlov.png","language":"Java","readme":"fixio - FIX Protocol Support for Netty [![Java CI with Maven](https://github.com/kpavlov/fixio/actions/workflows/maven.yml/badge.svg)](https://github.com/kpavlov/fixio/actions/workflows/maven.yml) [![Codacy Badge](https://api.codacy.com/project/badge/Grade/7a6c7475813e44c5a96abe915ed60e73)](https://www.codacy.com/app/kpavlov/fixio?utm_source=github.com\u0026amp;utm_medium=referral\u0026amp;utm_content=kpavlov/fixio\u0026amp;utm_campaign=Badge_Grade)\n=====\n\n# Overview #\n\n## Why One More FIX Protocol API\n\nThis API is intended to replace well known [QuickFIX/J][quickfix] in high-frequency trading scenarios.\n\n## Design goals\n\n1. Implement [FIX Protocol][fixprotocol] Java API with as low memory footprint as possible in order to eliminate unnecessary GC overhead,\nthus improving overall application performance under high load.\n2. Provide [FIX Protocol][fixprotocol] Codecs for [Netty][netty], to make it possible to get rid of Apache [Mina][mina] which is used by [QuickFIX/J][quickfix] as a transport layer.\n3. Avoid using expensive operations:\n     - Avoid synchronization.\n     - Replace BigDecimals with custom [Fixed Point Number][FixedPointNumber] implementation for financial data.\n     - Reuse java.util.Calendar and java.util.TimeZone instances.\n\nThe API has a number of [limitations](#Limitations), so it may be not suitable for any FIX application.\n\n## Limitations\n\n1. Logon message encryption is not supported. EncryptMethod(98)=0\n2. XmlData is not supported\n3. Message encodings other than US-ASCII are not supported.\n4. Message resending and resend requests are not supported.\n5. ...\n\n## Performance\n\nCurrently fixio can beat QuickFix performance in simple scenario. See [performance comparison](https://github.com/kpavlov/fixio/wiki/Performance-Comparison).\n\n# Getting Started\n\n1. [Download ZIP archive](archive/master.zip) or clone/fork the repository.\n2. Build and install project artifacts to your local maven repository:\n`mvn clean install`\n3. Add the dependency to your project\n\n~~~~~~~~~xml\n\u003cdependency\u003e\n    \u003cgroupId\u003ekpavlov.fixio\u003c/groupId\u003e\n    \u003cartifactId\u003ecore\u003c/artifactId\u003e\n    \u003cversion\u003e1.2\u003c/version\u003e\n\u003c/dependency\u003e\n~~~~~~~~~\n\nYou'll also need a slf4j API implementation at runtime, so please add appropriate dependency, e.g.:\n\n~~~~~~~~~xml\n\u003cdependency\u003e\n    \u003cgroupId\u003eorg.slf4j\u003c/groupId\u003e\n    \u003cartifactId\u003eslf4j-simple\u003c/artifactId\u003e\n    \u003cversion\u003e1.7.25\u003c/version\u003e\n    \u003cscope\u003eruntime\u003c/scope\u003e\n    \u003coptional\u003etrue\u003c/optional\u003e\n\u003c/dependency\u003e\n~~~~~~~~~\n\n## Examples\n\nYou may find working example of [client][client-example]\nand [server][server-example] applications in module [\"examples\"][examples-module].\n\nI recommend running server with Concurrent Mark Sweep Collector enabled: `-XX:+UseConcMarkSweepGC`\nand increased Survivor spaces (`-XX:SurvivorRatio=4`).\n\n### Writing Simple FIX Client\n\nTo create a simple FIX client you need to:\n\n1. Implement [FixApplication][FixApplication].\n   You may extend [FixApplicationAdapter][FixApplicationAdapter] as a quick start.\n\n2. Create an instance of [FixClient][FixClient] and initialize if with [FixApplication][FixApplication] you've just created and classpath reference to FIX session settings property file.\n\n3. Invoke `FixClient.connect(host, port)` to initiate connection.\n   Method `connect(...)` returns a [ChannelFeature][ChannelFeature] which which will be notified when a channel is closed,\n    so you may invoke the method `sync()` on it if you wish to wait for connection to be closed.\n\n~~~~~~~~~java\nFixApplication app = new FixApplicationAdapter();\nclient = new FixClient(app);\n\n// set settings file location related to classpath\nclient.setSettingsResource(\"/client.properties\");\n\n// connect to specified host and port\nChannelFeature closeFeature = client.connect(\"localhost\", 10201);\n\n// wait until FIX Session is closed\ncloseFeature.sync();\n\n// Shutdown FIX client\nclient.disconnect();\n~~~~~~~~~\n\n### SSL Support for Client\n\nYou may set a property `ssl=true` in `client.properties` file.\n \nOr configure `FixSessionSettingsProvider` by hand. See `FixSessionSettingsProvider.Params.SSL`.\n\nYou may find more information in [User Guide](https://github.com/kpavlov/fixio/wiki/User-Guide) and\n[Wiki pages](https://github.com/kpavlov/fixio/wiki).\n\n[FixedPointNumber]: https://github.com/kpavlov/fixio/treemaster/core/src/main/java/fixio/fixprotocol/fields/FixedPointNumber.java\n[FixApplication]: https://github.com/kpavlov/fixio/treemaster/core/src/main/java/fixio/handlers/FixApplication.java\n[FixApplicationAdapter]: https://github.com/kpavlov/fixio/treemaster/core/src/main/java/fixio/handlers/FixApplicationAdapter.java\n[FixClient]: https://github.com/kpavlov/fixio/treemaster/core/src/main/java/fixio/FixClient.java\n[FixServer]: https://github.com/kpavlov/fixio/treemaster/core/src/main/java/fixio/FixServer.java\n[FixAuthenticator]: https://github.com/kpavlov/fixio/treemaster/core/src/main/java/fixio/netty/pipeline/server/FixAuthenticator.java\n[AcceptAllAuthenticator]: https://github.com/kpavlov/fixio/treemaster/core/src/main/java/fixio/netty/pipeline/server/AcceptAllAuthenticator.java\n[ChannelFeature]: http://netty.io/5.0/api/io/netty/channel/ChannelFuture.html\n\n[FixMessage]: https://github.com/kpavlov/fixio/treemaster/core/src/main/java/fixio/fixprotocol/FixMessage.java\n[FixMessageBuilder]: https://github.com/kpavlov/fixio/treemaster/core/src/main/java/fixio/fixprotocol/FixMessageBuilder.java\n\n[client-example]: https://github.com/kpavlov/fixio/treemaster/examples/src/main/java/fixio/examples/priceclient\n[server-example]: https://github.com/kpavlov/fixio/treemaster/examples/src/main/java/fixio/examples/priceserver\n[examples-module]: https://github.com/kpavlov/fixio/treemaster/examples\n[quickfix]: http://www.quickfixj.org/ \"Java Open Source FIX Engine\"\n[mina]: http://directory.apache.org/subprojects/mina/ \"Apache Mina\"\n[netty]: http://netty.io/ \"Netty\"\n[fixprotocol]: http://www.fixprotocol.org/ \"FIX Protocol\"\n","funding_links":[],"categories":[],"sub_categories":[],"project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fkpavlov%2Ffixio","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Fkpavlov%2Ffixio","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fkpavlov%2Ffixio/lists"}