整个系统架构由多个消息服务器组成,这些消息服务器基于TCP长链接连接以确保数据可靠性,并且消息协议基于自定义二进制协议。市场数据转发服务器使用拉模式从市场数据源(Esuny在线配资,Win Lottery等)中及时获取市场数据,并将其实时转发到较低级别的市场服务器和交易服务器。下层市场服务器将市场数据实时转发到每个市场交易客户端。每个服务器都支持水平扩展。
服务器的实现基于IOCP来完成端口队列的实现,这是Microsoft建议的SEA方法,即SocketAsyncEventArgs。该方法着重于池化,池化的目的是减少和重用运行时分配和垃圾回收。
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);
}
会话实现代码段,请参阅SuperSocket的实现
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);
}
}
}
缓冲池的管理:进行过Socket服务器程序开发的朋友都知道,缓冲区管理的质量是影响服务器程序性能的重要因素。默认情况下,服务器不使用缓冲区管理,需要对其进行配置以启用它。主要是因为NETGC的大对象堆压缩问题。当前,GC仅回收但不压缩大对象堆,这与托管堆栈段上的小对象堆不同。因此,对于缓冲区管理,我使用抽屉式管理方法预先在托管堆栈段上打开多个连续段,以实现统一内存以防止内存碎片的问题。由于代码很多,因此不会在此处发布任何代码。
消息协议:消息协议是基于自定义二进制(标头)+ Protocolbuffer(程序包主体)实现的。 Protocolbuffer是Google的开源消息编码格式,基于二进制格式存储,独立于语言和平台,并且实现了大多数主流的所有语言,最大的优势是消息包的小型,快速和面向对象处理。报价源的数据包格式取决于报价源,每个报价源的数据包都不同。
市场信息访问服务器的管理,winform的实现,主要用于合同的订阅,取消,CRUD等操作。市场服务器管理平台,由wpf / winform实现,主要用于合同和与市场相关的管理。交易管理背景包括诸如无限级别的帐户管理支持,代理管理,交易管理,合同管理,资本管理等功能,以及以交易对手价格,市场价格和指定价格进行交易的功能。后端实现逻辑相对简单,主要是消息协议的定制,规则的定制以及交易业务逻辑的实现。
市场交易客户端当前包括PC版本,Android版本和ios版本。客户的模块包括交易模块在线股票配资,查询模块期货配资在线出入金,资金模块和系统设置模块。
如果您有任何疑问期货配资在线出入金,请随时与我联系。球:179660335,电话:132-5080_2341