web service 分别采用HTTP1.1和HTTP1.0作为传输协议的性能差异。
1. 操作域模拟器一套。
2. HTTP1.1和HTTP1.0测试脚本各一套。
监控使用HTTP1.0作为传输协议时, 操作域模拟器的TPS, 响应时间。
LOADRUNNER并发用户数设定为20。
性能参数 |
最小值 |
平均值 |
最大值 |
TPS |
107.538 |
285.307 |
311.563 |
响应时间 (s) |
0.027 |
0.067 |
0.078 |
|
图 2.1(Web Service Http 1.0) 红色:响应时间 蓝色:TPS |
监控在使用HTTP1.1作为传输协议后,操作域模拟器的响应时间,TPS。
LOADRUNNER并发用户数设定为20。
性能参数 |
最小值 |
平均值 |
最大值 |
TPS |
95.25 |
404.722 |
451.875 |
响应时间 (s) |
0.009 |
0.040 |
0.045 |
|
图 2.2(Web Service Http 1.1) 红色:响应时间 蓝色:TPS |
监控在使用HTTP1.1作为传输协议后,操作域模拟器的响应时间,TPS。
LOADRUNNER并发用户数设定为20。
性能参数 |
最小值 |
平均值 |
最大值 |
TPS |
77.00 |
330.324 |
365.563 |
响应时间 (s) |
0.010 |
0.045 |
0.055 |
|
图 2.3(Web Service Http 1.1/Http 1.0混合测试) 红色:响应时间 蓝色:TPS |
Web Service 客户端如果采用HTTP1.1长连接作为连接方式,能明显减少创建SOCKET连接所需要的时间,显著提交了TPS和响应时间。
AXIS引擎通过使用CommonHTTPSender代替默认的HTTPSender。ServiceLocator必须只实例化一次. 然后在所有stub中共用. 之所以如此是因为ServiceLocator管理着http connection的连接池, 它通过CommonsHTTPSender的引用管理着MultiThreadedHttpConnectionManager,实例程序代码片段请参照:
static {
private static SyncRoamingUser_ServiceLocator serviceLocator;
EngineConfiguration defaultConfig = EngineConfigurationFactoryFinder
.newFactory().getClientEngineConfig();
SimpleProvider config = new SimpleProvider(defaultConfig);
config.deployTransport(HTTPTransport.DEFAULT_TRANSPORT_NAME,
new CommonsHTTPSender());
serviceLocator = new SyncRoamingUser_ServiceLocator(config);//Only once.
}
AXIS引擎通过设置AxisProperties的属性,来定义HTTP连接池的参数。HTTP连接池可配置参数见如下程序代码和注释:
// "Total Connections" Pool size
AxisProperties.setProperty(
DefaultCommonsHTTPClientProperties.MAXIMUM_TOTAL_CONNECTIONS_PROPERTY_KEY,
maxTotalConnections);
// "Connections per host" pool size
AxisProperties.setProperty(
DefaultCommonsHTTPClientProperties.MAXIMUM_CONNECTIONS_PER_HOST_PROPERTY_KEY,
maxConnectionsPerHost);
// max duration to wait for a connection from the pool
AxisProperties.setProperty(
DefaultCommonsHTTPClientProperties.CONNECTION_POOL_TIMEOUT_KEY, connectionPoolTimeout);
// Timeout to establish connection in millis
AxisProperties.setProperty(
DefaultCommonsHTTPClientProperties.CONNECTION_DEFAULT_CONNECTION_TIMEOUT_KEY, connectionTimeout);
// Timeout "waiting for data" (read timeout)
AxisProperties.setProperty(
DefaultCommonsHTTPClientProperties.CONNECTION_DEFAULT_SO_TIMEOUT_KEY, soTimeout);