期货资管软件结构介绍,分仓系统源码

  • 整体结构

整个系统架构是由若干个消息服务器端组成,基于TCP长链接连接,确保数据的可靠性,消息协议基于自定义二进制协议。行情转发服务端以拉模式定时从行情源(易盛、赢透等等)获取及时行情数据,实时转发给下级行情服务器和交易服务器,下级行情服务器实时转发行情数据到各行情交易客户端。各服务端均支持水平扩展。

  • 服务端

服务端的实现是基于IOCP完成端口队列实现,微软推荐的SEA方式,即SocketAsyncEventArgs。此方式重点在于池化(pooling),池化的目的就是为了减少和重用运行时分配和垃圾回收。
Accept Loop实现的代码片段

while (IsListening)
            {
                var sea = _acceptSeaPool.Take();
                var socketError = await _listener.AcceptAsync(sea);
                if (socketError == SocketError.Success)
                {
                    var acceptedSocket = sea.AcceptSocket;
                    TSocket result2 = null;

                    try
                    {
                        result2 = new TSocket(sea);
                        if (useBufferedSockets)
                        {
                            TBuffered result3 = new TBuffered(result2);
                            return result3;
                        }
                        else
                        {
                            return result2;
                        }
                    }
                    catch (System.Exception)
                    {
                        if (result2 != null)
                            result2.Dispose();
                        else
                            ((IDisposable)sea).Dispose();
                        throw;
                    }
                }
                else
                {
                }

                _acceptSeaPool.Return(sea);
            }

Session 实现的代码片段,参照SupperSocket的实现方式

private void ProcessAcceptSocket(Socket acceptedSocket)
            {
                var session = _sessionPool.Get();
                session.Create(acceptedSocket);

                if (_sessions.TryAdd(session.SessionKey, session))
                {
                    try
                    {
                        session.Start();
                    }
                    finally
                    {
                        _sessionPool.Return(session);
                    }
                }
            }

Buffer池的管理:做过Socket服务端程序开发的朋友都知道,buffer管理的好坏是影响服务端程序性能的一个重要因素。该服务端默认情况下不使用buffer管理,需要配置开启。主要是因为NETGC大对象堆压缩的问题,目前GC针对大对象堆只回收不压缩,不同于托管堆栈段上的小型对象堆。所以针对buffer管理我使用了抽屉式的管理方式,预先在托管堆栈段上开辟多个连续的片段,实现整开整收防止内存碎片的问题。由于代码比较多,此处就不贴代码了。

消息协议:消息协议是基于自定义二进制(包头)+Protocolbuffer(包体)实现,Protocolbuffer是谷歌开源的消息编码格式,基于二进制格式存储,独立于语言和平台,并且大部分主流语言都有实现,最大的优势小、快、面向对象处理消息包体。行情源的数据包格式视行情源而定,每个行情源的数据包都不同。

  • 后台管理平台

行情接入服务端管理,winform实现,主要针对合约的订阅、取消、CRUD等操作。行情服务端管理平台,wpf/winform实现,主要针对合约、市场的相关管理。交易管理后台包括账户管理支持无限级、代理商管理、交易管理、合约管理、资金管理等等功能,支持对手价、市价、指定价进行交易等等功能。后台的实现逻辑比较简单,主要是消息协议的定制、规则定制以及交易业务逻辑的实现。
期货资管软件结构介绍,分仓系统源码_第1张图片

  • 客户端

行情交易客户端目前包括pc版,android版本,ios版本。客户端的模块包括交易模块、查询模块、资金模块、系统设置模块。
期货资管软件结构介绍,分仓系统源码_第2张图片
期货资管软件结构介绍,分仓系统源码_第3张图片
有问题可随时找我沟通,球球:179660335,TEL:132—5080_2341

你可能感兴趣的:(资管系统)