上海期货交易所第二代行情发布平台接口规范Version:1.
10发布日期:2019/02/18修订记录、核准记录和审核记录修订记录版本编号修订日期修订摘要0.
902018/09/25创建征求意见稿1.
002018/11/28根据相关意见修改发布1.
102019/02/14增加合约行情更新相关信息:章节5.
2.
4中成交行情域中增加更新时间和合约行情快照编号等4个字段.
调整组播心跳频率:章节6.
2.
1中心跳发送频率从5秒改为3秒.
修改和增加一些解释说明:章节6.
2.
2中修改增量行情消息为增量行情刷新消息,以区分出其只是增量行情报文的其中一种消息.
章节5.
2.
2中添加说明响应信息域是查询失败反馈报文中唯一域;章节5.
2.
2中增加用户端产品信息和接口端产品信息说明.
修改了一些文稿小错误:如章节5.
2.
4中快照时间域的采样时间格式最后的结束符从'\n'修改为'\0'.
核准记录核准人员属于部门(单位)核准日期邹文军上期技术2019/02/15审核记录审核人员属于部门(单位)审核日期赵鸿昊上期技术2019/02/15文件制作和维护:上海期货信息技术有限公司.
目录1.
引言2.
行情及其组织形式2.
1行情主题2.
2行情快照和增量行情3.
平台提供的服务4.
字段类型和报文4.
1字段类型4.
2报文4.
2.
1报文结构4.
2.
2域构成语法4.
2.
3报文与消息5.
行情查询服务5.
1MDQP报文头5.
2行情查询服务的功能5.
2.
1心跳功能心跳消息(TypeID=0x00)5.
2.
2用户登录功能登录请求(TypeID=0x11)登录应答(TypeID=0x12)5.
2.
3用户登出功能登出请求(TypeID=0x13)登出应答(TypeID=0x14)5.
2.
4主题行情快照查询功能快照查询请求(TypeID=0x31)快照查询应答(TypeID=0x32)5.
2.
5增量行情查询功能增量查询请求(TypeID=0x33)增量查询应答(TypeID=0x34)6.
增量行情服务6.
1MIRP报文头6.
2增量行情服务的功能6.
2.
1心跳功能心跳消息(TypeID=0x00)6.
2.
2增量行情推送功能增量行情刷新消息(TypeID=0x01)7.
启动与恢复7.
1启动过程7.
2行情恢复7.
2.
1快照恢复7.
2.
2增量行情补足恢复7.
3数据中心切换8.
结束语1.
引言上海期货交易所(下文简称:上期所)第二代行情发布平台(SHFEMarketDataPlatform,SMDP2.
0)采用数据编码压缩以及组播传输等技术方法,发送期货及衍生品交易行情.
本规范介绍上期所第二代行情发布平台(下文简称:平台)提供的服务,以及服务接口、协议和编码,并给出从平台获取行情的步骤.
2.
行情及其组织形式2.
1行情主题上期所期货及衍生品交易行情是按照行情主题进行组织的.
行情主题定义了行情的发布内容和发布方式,包括产品、行情深度、采样频率、延迟时间和统计模式等.
各个行情主题的具体参数请参考上期所发布的主题列表.
产品:指出该主题行情包含哪些期货及衍生品品种.
行情深度:上期所第二代行情发布平台的行情是分价格档位行情(MarketByPrice,MBP),行情深度指的是行情价格档位的数量.
采样频率:上期所第二代行情发布平台的行情是切片行情,采样频率指的是切片频率.
延时时间:延迟时间为该切片行情延后于实时切片行情的时间.
实时切片行情的延迟时间为0.
统计模式:分为双边统计和单边统计.
单边统计中的成交量和成交金额按照单边计算.
而双边统计按双边计算,成交量和成交金额为单边统计的两倍.
平台的用户按照权限可获得相应主题的行情.
2.
2行情快照和增量行情平台中的行情信息通过行情快照和增量行情的形式提供给客户.
行情快照反映了某个时刻(某个行情切片时刻)的市场状态,包括了某时刻的报单、成交、合约和市场统计等所有行情信息.
增量行情反映了行情快照的变化,包含了新旧行情快照在相应两个切片时刻内的累积变化.
行情信息在两个切片时刻内的累计变化会导致行情快照的更新,行情快照的更新都会产生对应的增量行情.
新行情快照可以根据原行情快照及对应的增量行情得到.
主题行情快照由该主题所包含的所有期货及衍生品品种的合约行情快照组成.
主题增量行情由相应的合约增量行情组成.
如果某合约在对应的切片时刻内未产生增量行情(无更新),则该主题增量行情中就不包含该合约的行情信息.
举例说明:主题下包括三个合约:合约1、合约2和合约3,那么一个主题行情快照则由合约1的合约行情快照、合约2的合约行情快照和合约3的合约行情快照组成.
主题行情快照合约1合约行情快照合约2合约行情快照合约3合约行情快照而在一次主题行情变化中,仅合约1和合约3的合约行情快照发生了变化.
则主题增量行情仅包括合约1和合约3的合约增量行情.
合约2的空合约增量行情被省略.
主题增量行情合约1合约增量行情合约3合约增量行情每个主题行情独立对自己的主题行情快照进行编号,称为快照编号.
主题行情快照的编号从0开始,单向递增.
主题增量行情也有编号,当主题行情快照的编号从n变为n+1时,其产生的主题增量行情的编号为n+1.
用户在获取一个主题行情快照后,可以在其基础上,根据后续的主题增量行情,更新为后续的主题行情快照.
主题增量行情的编号与其对应的主题行情快照的编号一致.
后续章节中,我们有时也将主题增量行情的编号称为其快照编号.
主题行情快照(0)主题增量行情(1)主题行情快照(1)主题增量行情(2)主题行情快照(2)++合约行情快照也有自己的快照编号,除了初始编号与主题行情快照编号相同外,后续都是根据合约自己的变化独立编号.
合约增量行情和合约行情快照的联系也是通过编号进行的.
每一次合约增量行情都意味着合约行情快照的编号递增,合约增量行情的编号与其对应的合约行情快照的编号一致.
值得注意的是,每一次主题行情快照变化时,主题行情快照编号必须递增,但主题增量行情仅包括部分合约的合约增量行情,仅部分合约行情快照的编号在本次主题增量行情对应的变化中递增,这会导致主题增量行情的编号和其下合约的合约增量行情的编号渐渐不同.
每个合约行情快照是由其合约信息、成交行情和分价表信息三个部分行情信息组成.
合约增量行情是由一系列合约事件构成,每种合约事件代表了合约行情快照中的特定部分信息的变动.
我们将在后续的章节中详细介绍其中具体的内容.
3.
平台提供的服务上期所第二代行情发布平台按行情主题定义的采样频率,对相应产品的行情信息进行切片.
当行情信息发生变化时,产生主题行情快照,并以组播的方式推送主题增量行情,向用户提供行情更新.
平台提供与用户交互的行情查询服务和向用户单向推送的增量行情服务.
行情查询服务为用户提供登录登出、行情快照查询和增量行情缺失补足等功能.
使用MDQP协议(MarketDataQueryProtocol)与用户进行交互.
MDQP协议的网络层协议为TCP协议.
增量行情服务将每个主题的增量行情推送给该主题行情的订阅客户.
增量行情服务使用MIRP协议(MarketdataIncrementalRefreshProtocol)以组播方式向用户推送信息.
MIRP协议的网络层协议为UDP协议.
平台采用的是两地三中心部署的主备运行模式.
每个中心中都布有多个行情查询服务和增量行情服务.
对于行情查询服务,用户可连接其中任意一个.
对于增量行情服务,用户可选择接入一路或同时接入多路.
正常情况下,备中心的服务(图中虚线部分)不启用.
如下图所示.
4.
字段类型和报文在介绍平台提供的功能和协议之前,我们先介绍平台的两种协议支持的字段类型和报文结构.
4.
1字段类型字段是平台支持的两种协议信息模块的基本单位.
每个字段按照其类型进行编码.
字段按照协议定义的顺序以小端紧凑的方式编码成更大的信息模块,不支持字段的字节对齐.
平台支持的编码类型包括:不同大小的整形、双精度浮点型、不同长度的字符数组和字节数组等.
具体如下表所示.
类型长度(字节)编码说明Intnn/8二进制编码长度为nbits的有符号整型.
n可为8、16、32或64.
如Int32为32位二进制编码的有符号整型.
uIntnn/8二进制编码长度为nbits的无符号整型.
n可为8、16、32或64.
Double8二进制编码(IEEE754)双精度浮点数.
其中DBL_MAX用以表示无效值.
Char[n]n二进制编码长度为n的标准字符或字符串.
n可以为任意正整数.
当n为1时,表示字符;当n大于1时,用以存储字符串.
字符串必须以"\0"结尾.
也就是说,Char[n](n>1)中存放的有效字符串为其中存储的第一个"\0"之前的字符序列.
Byte[n]n二进制编码长度为n的字节数组.
n可以为任意正整数.
VInt1~10Varint+ZigZag编码一种紧凑编码方式,用以编码64位有符号整型.
VInt编码为Varint编码和ZigZag编码的结合,为一种将64位二进制编码的有符号整型编码在最多10字节中的编码方式.
Varint编码为一种将64位二进制编码的无符号整型根据其大小用不同长度字节进行编码的编码方式.
其编码特点为数字越小所占用的字节数越少.
每个字节的低7位用来表示数字,最高位有特殊的含义:如果该位为1,表示后续的一个字节也是该数字的一部分;如果该位为0,则该字节为该数字的最后一个字节.
因此小于128的数字都可以用一个字节表示.
大于128的数字,会用两个或两个以上的字节编码.
举例:整数1的表示,仅需一个字节00000001整数300的表示,需要两个字节1010110000000010ZigZag编码是为了配合Varint来使用的一种为有符号整型数定义的编码.
ZigZag的原理是按照绝对值大小来重新解析二进制.
其编码如下表所示:原有符号数编码为00原有符号数编码为-1112-2324-35.
.
.
.
.
.
21474836474294967294-21474836484294967295用一个表达式来表示ZigZag编码,为:EncZZ(n)=(n>63)其中:>为按位右移运算.
对ZigZag编码进行解码的公式为:DecZZ(n)=(-(n&0x01))^((n>>1)&~(1=1/\=0在结构图中,我们用一个带箭头的圆圈表示带出现次数限制的域或域串.
圆圈下为出现次数的限制.
域=1/\=1/\0/\0/\<=M合约增量行情头域分价表变动域<=2N成交概要域最高价域最低价域开盘价域收盘价域涨停板价域跌停板价域结算价域虚实度域<=1合约增量行情头域(FieldID=0x0003)中包含合约编码和合约增量行情编号,一般用以标识一个合约增量行情的开始.
字段类型说明InstrumentNoVInt合约编码.
ChangeNoVInt当前行情合约增量行情的编号.
在对应合约快照发生变化时,编号顺序递增.
分价表变动域(FieldID=0x1001)包含了一个分价表变动事件的数据内容.
分价表变动事件反映了该合约的行情合约行情快照的分价表信息的变化.
一个分价表变动事件反映了分价表某一方向的某一个档位上的信息变动.
单独一个分价表变动事件可能不能完全反映所有的分价表信息变化,所以一个行情合约增量行情中可以包括多个分价表变动事件.
字段类型备注EventTypeChar[1]事件类型.
取值范围为:'1':增加'2':修改'3':删除.
字段类型备注MDEntryTypeChar[1]买卖方向.
取值范围为:'0':bid'1':ask.
PriceLevelVInt档位深度.
从1开始依次递增,表明对分价表的第几档进行操作.
PriceOffsetVInt档位价格.
编码中的值为实际价格相对于对应主题行情快照中的编解码基准价有多少个最小变动价位的偏移.
假设该值为n,则实际价格为(编解码基准价)+n*(最小变动价位).
VolumeVInt报单量.
使用分价表变动事件序列来反映合约行情快照中的分价表信息变化时,应该保证合约行情快照中的分价表信息完整性.
分价表变动事件序列总体为一个事务,平台仅保证分价表变动事件序列前后分价表的信息完整性.
用户在使用分价表变动事件来重构分价表时,应该严格按照分价表变动事件的顺序进行.
接下来我们举例说明使用分价表变动事件序列进行快照中分价表信息更新的过程.
我们举一个例子来展现平台如何生成分价表变动事件以及用户应该如何根据分价表变动事件来更新分价表.
下图中,某行情深度为3的主题中编号为20的合约某一次切片,平台中的所有档位的分价表信息发生了变化后,平台产生了四个分价表变动事件.
分价表事件根据价格编码基准价23.
00和最小变动价0.
50进行编码.
行情客户端收到平台发送的四个分价表变动域后,顺序处理对用户端拥有的深度为3的分价表进行更新.
其中有两点值得特别注意:一是在所有分价表变动域处理完之前,超出分价表深度的信息不能马上丢失,后续可能需要使用.
如上述例子中的Bid中21.
00价格档;二是所有分价表变动域超出分价表深度的信息可能不准确,不能用作参考,必须丢弃.
如上述例子更新后的分价表中的Ask中25.
00价位在平台中已经发生变化.
成交概要域(FieldID=0x1002)包含了一个成交概要事件的数据内容.
成交概要事件包括了成交行情中的最新价、成交金额、成交量和持仓量的变化.
事件内容为这些信息变化后的数据.
一个行情合约增量行情中最多只有一个成交概要事件.
字段类型备注LastPriceOffsetVInt最新价偏移量.
编码方式和意义同分价表变动事件中的档位价格的编码.
VolumeChangeVInt成交量变化.
实际成交量相对于上一个合约行情快照中的成交量的变化.
假设该值为n,则成交量=(原成交量)+n.
TurnoverOffsetVInt成交额变化.
假设该值为n,则实际成交额=(原成交额)+((成交量-原成交量)*(编解码基准价)+n*(最小变动价位))*(合约乘数).
OpenInterestChangeVInt持仓量变化.
实际持仓量相对于上一个合约行情快照中持仓量的变化.
最高价域(FieldID=0x1011)包含了最高价变动事件的数据内容.
最高价变动事件反映了成交行情中的最高价的变化.
事件内容为新的最高价.
一个行情合约增量行情中最多只有一个最高价变动事件.
字段类型备注字段类型备注HighPriceOffsetVInt最高价偏移量.
编码方式和意义同分价表变动事件中的档位价格的编码.
最低价域(FieldID=0x1012)包含了最低价变动事件的数据内容.
最低价变动事件反映了成交行情中的最低价的变化.
事件内容为新的最低价.
一个行情合约增量行情中最多只有一个最低价变动事件.
字段类型备注LowPriceOffsetVInt最低价偏移量.
编码方式和意义同分价表变动事件中的档位价格的编码.
开盘价域(FieldID=0x1013)包含了开盘价确定事件的数据内容.
开盘价确定事件提供了成交行情中的今开盘,表示当日的开盘价已经确定.
事件内容为当日开盘价.
一个行情合约增量行情中最多只有一个开盘价确认事件.
一般情况下,一个交易日中,最多只会出现一次开盘价确定事件.
字段类型备注OpenPriceOffsetVInt开盘价偏移量.
编码方式和意义同分价表变动事件中的档位价格的编码.
收盘价域(FieldID=0x1014)包含了收盘价确定事件的数据.
收盘价确定事件提供了成交行情中的今收盘.
事件内容为当日收盘价.
一个行情合约增量行情中最多只有一个收盘价确认事件.
一般情况下,一个交易日中,最多只会出现一次收盘价确定事件.
字段类型备注ClosePriceOffsetVInt收盘价偏移量.
编码方式和意义同分价表变动事件中的档位价格的编码.
涨停板价域(FieldID=0x1015)包含了涨停板价变动事件的数据.
涨停板价变动事件提供了当时的涨停板价.
事件内容为涨停板价.
一个行情合约增量行情中最多只有一个涨停板价变动事件.
在静态涨跌停板制度的情况下,同一个交易日中,涨停板价一般保持不变.
在动态涨跌停板制度中,同一个交易日中,涨停板价变动可能会出现多次.
字段类型备注UpperLimitPriceOffsetVInt涨停板价偏移量.
编码方式和意义同分价表变动事件中的档位价格的编码.
跌停板价域(FieldID=0x1016)用以封装跌停板价变动事件.
跌停板价变动事件提供了当时的跌停板价.
事件内容为跌停板价.
一个行情合约增量行情中最多只有一个跌停板价变动事件.
在静态涨跌停板制度的情况下,同一个交易日中,跌停板价一般保持不变.
在动态涨跌停板制度中,同一个交易日中,跌停板价变动可能会出现多次.
字段类型备注LowerLimitPriceOffsetVInt跌停板价偏移量.
编码方式和意义同分价表变动事件中的档位价格的编码.
结算价域(FieldID=0x1017)用以封装结算价确定事件.
结算价确定事件提供了成交行情中的今结算.
事件内容为当日结算价.
一个行情合约增量行情中最多只有一个结算价确认事件.
一般情况下,一个交易日中,最多只会出现一次结算价确定事件.
字段类型备注SettlementPriceOffsetVInt结算价偏移量.
编码方式和意义同分价表变动事件中的档位价格的编码.
虚实度域(FieldID=0x1018)封装了虚实度确定事件.
虚实度确定事件提供了成交行情中的今虚实度.
事件内容为当日虚实度.
一个行情合约增量行情中最多只有一个虚实度确认事件.
一般情况下,一个交易日中,最多只会出现一次虚实度确定事件.
字段类型备注字段类型备注CurrDeltaDouble虚实度.
7.
启动与恢复本章介绍客户端在使用平台订阅和处理行情的一些过程,包括用户订阅行情的启动过程、行情恢复过程和数据中心切换处理过程等.
7.
1启动过程用户在连接时的启动过程如下:1.
接收并缓存增量行情报文:加入指定的组播组,开始接收MIRP报文,并缓存报文类型为增量行情的MIRP报文.
缓存过程中需注意数据中心号的变化,如果出现有更大数据中心编号的增量行情报文时,丢弃原有缓存,重新缓存具有较大数据中心编号的增量行情报文.
2.
连接并登录:与行情查询服务建立TCP连接,使用登录请求功能登录.
3.
快照查询:使用主题行情快照查询功能查询最新的主题行情快照.
4.
数据中心确认:检查所查询的主题行情快照的数据中心编号与所缓存的增量行情报文中的一致.
如果不一致,返回步骤2.
5.
处理缓存增量行情:在所查询的快照基础上,处理缓存的增量行情报文.
1).
从最小的报文编号逐个开始处理2).
如果增量行情报文编号小于等于快照中的增量报文最新编号,则丢弃.
直到找到报文编号大于增量报文最新编号的报文为止.
3).
检查确认增量行情报文编号为增量报文最新编号+1,否则,表明丢包了,进入行情恢复过程处理.
(参考行情恢复流程章节)4).
按照报文号递增顺序处理增量行情报文.
6.
持续更新行情:继续按报文号顺序处理新收到的增量行情报文.
行情查询服务行情查询服务增量行情服务增量行情服务用户行情客户端用户行情客户端加入组播组组播增量行情报文、心跳报文侦听增量行情报文,并缓存尝试TCP连接连接成功组播增量行情报文、心跳报文登录请求登录应答组播增量行情报文、心跳报文快照查询请求快照查询应答确认数据中心未发生切换根据快照查询结果处理缓存增量行情处理缓存的增量行情报文组播增量行情报文、心跳报文处理新收到的的增量行情报文.
.
.
7.
2行情恢复用户在一些情况下,需要进行行情恢复.
行情恢复的方式包括快照恢复和增量行情补足恢复两种方式.
7.
2.
1快照恢复快照恢复的步骤与启动过程类似,需要从行情查询服务查询最新快照后,在最新快照的基础上处理增量行情.
在出现以下场景时建议使用快照恢复:出现大量的增量行情报文丢失;增量行情服务的心跳超时.
发生数据中心切换快照恢复具体的步骤如下:1.
继续接收MIRP报文,缓存所有增量行情报文.
缓存过程中需注意数据中心号的变化.
2.
向行情查询服务查询最新的主题行情快照.
如果连接失效,需要先连接并登录.
3.
确认数据中心.
4.
基于平台发过来的查询主题行情快照,顺序处理缓存的增量行情报文:1).
按照快照中的增量行情最新编号,丢弃所有编号小于等于该编号的增量行情报文.
2).
检查确认当前处理到的增量行情报文号为快照中的增量行情最新编号+1.
否则,表明需要重新查询主题行情快照,转到步骤2.
3).
按照报文号递增顺序处理增量行情报文(如果报文体被加密,使用主题属性里的加密信息解密).
5.
继续按报文号顺序处理新收到的增量行情报文.
行情查询服务行情查询服务增量行情服务增量行情服务用户行情客户端用户行情客户端组播增量行情报文、心跳报文缓存增量行情报文快照查询请求组播增量行情报文、心跳报文快照查询应答处理缓存的增量行情报文组播增量行情报文、心跳报文处理新收到的的增量行情报文.
.
.
组播增量行情报文、心跳报文.
.
.
7.
2.
2增量行情补足恢复增量行情补足通过向行情查询服务查询丢失的增量报文进行行情恢复.
增量行情补足恢复过程适用于较少量增量行情报文丢失的情况下的快速恢复.
增量行情补足恢复具体的步骤如下:1.
持续接收MIRP报文并缓存增量行情报文.
2.
确定丢失的增量行情报文的报文编号,使用增量查询请求向行情查询服务申请补足该增量行情报文.
3.
按顺序处理平台增量查询应答消息传来的增量行情报文和缓存报文.
4.
继续处理新收到的报文.
行情查询服务行情查询服务增量行情服务增量行情服务用户行情客户端用户行情客户端组播增量行情报文、心跳报文缓存增量行情报文增量查询请求组播增量行情报文、心跳报文增量查询应答处理查询到的增量行情报文处理缓存的增量行情报文组播增量行情报文、心跳报文处理新收到的的增量行情报文.
.
.
组播增量行情报文、心跳报文.
.
.
7.
3数据中心切换当用户接收到的增量行情报文中的数据中心编号发生递增时,表明发生了数据中心切换,用户在接收增量行情报文时,应关注数据中心编号的变化情况.
在交易所主备数据中心切换时,可能会导致用户已接收到的部分行情失效.
用户发现数据中心切换后,应尝试与行情查询服务重新建立TCP连接,并查询最新主题行情快照.
在重新进入行情接收状态前,用户应丢弃所有已接收到的大于本次数据中心切换有效快照编号的行情快照.
注:用户须加入所有中心的组播组,否则发生数据中心切换后可能收不到新的增量行情.
8.
结束语本文档介绍了平台和行情客户端交互的协议和接口规范.
如有任何疑问,请联系:FdTecSys@sfit.
shfe.
com.
cn
瓜云互联怎么样?瓜云互联之前商家使用的面板为WHMCS,目前商家已经正式更换到了魔方云的面板,瓜云互联商家主要提供中国香港和美国洛杉矶机房的套餐,香港采用CN2线路直连大陆,洛杉矶为高防vps套餐,三网回程CN2 GIA,提供超高的DDOS防御,瓜云互联商家承诺打死退款,目前商家提供了一个全场9折和充值的促销,有需要的朋友可以看看。点击进入:瓜云互联官方网站瓜云互联促销优惠:9折优惠码:联系在线客...
Moack怎么样?Moack(蘑菇主机)是一家成立于2016年的商家,据说是国人和韩国合资开办的主机商家,目前主要销售独立服务器,机房位于韩国MOACK机房,网络接入了kt/lg/kinx三条线路,目前到中国大陆的速度非常好,国内Ping值平均在45MS左右,而且商家的套餐比较便宜,针对国人有很多活动。不过目前如果购买机器如需现场处理,由于COVID-19越来越严重,MOACK办公楼里的人也被感染...
profitserver怎么样?profitserver是一家成立于2003的主机商家,是ITC控股的一个部门,主要经营的产品域名、SSL证书、虚拟主机、VPS和独立服务器,机房有俄罗斯、新加坡、荷兰、美国、保加利亚,VPS采用的是KVM虚拟架构,硬盘采用纯SSD,而且最大的优势是不限制流量,大公司运营,机器比较稳定,数据中心众多。此次ProfitServer正在对德国VPS(法兰克福)、西班牙v...
ss协议为你推荐
音视频iphonewordpress模板wordpress模板与主题的区别空间文章空间的文章被人推荐有什么好处建企业网站想建立一个企业网站asp.net什么叫ASP.NET?netshwinsockreset开始-运行-输入CMD-确定-输入netsh winsock reset,按Enter确定。然后重启。 是什么意思重庆电信dns重庆电信的DNS是什么ipad代理想买个ipad,3000至4000元左右有什么好的filezilla_server如何用FileZilla Server新增FTP帐号filezilla_serverFileZilla无法连接服务器怎么解决
域名到期查询 美国linux主机 lnmp google镜像 云网数据 host1plus godaddy主机 godaddy域名转出 中国智能物流骨干网 空间出租 怎么测试下载速度 东莞服务器 厦门电信 英国伦敦 net空间 网站加速 免备案cdn加速 阿里云邮箱个人版 apnic 云销售系统 更多