- 浏览: 2552573 次
- 性别:
- 来自: 成都
文章分类
最新评论
-
nation:
你好,在部署Mesos+Spark的运行环境时,出现一个现象, ...
Spark(4)Deal with Mesos -
sillycat:
AMAZON Relatedhttps://www.godad ...
AMAZON API Gateway(2)Client Side SSL with NGINX -
sillycat:
sudo usermod -aG docker ec2-use ...
Docker and VirtualBox(1)Set up Shared Disk for Virtual Box -
sillycat:
Every Half an Hour30 * * * * /u ...
Build Home NAS(3)Data Redundancy -
sillycat:
3 List the Cron Job I Have>c ...
Build Home NAS(3)Data Redundancy
xfire在高并发下的问题
在高并发的情况下,我同事测试出来有个问题,说是client里面有并发限制,而且是写死在代码里面的default配置
private static final int DEFAULT_MAX_CONN_PER_HOST = 6;
我也查找了一下,在类org.codehaus.xfire.transport.http.CommonsHttpMessageSender.java里面。
那么怎么修改呢,我参考了如下一些BLOG:
http://hi.baidu.com/hao_holly/blog/item/5377ba244f925820d407429c.html
http://xtjjj.blog.sohu.com/149111514.html
http://xfire.codehaus.org/Client+API
由于我以前为了写client方便,自己写了一个FactoryBean
com.sillycat.core.commons.plugins.webservice.xfire.XFireClientFactory
所以,目前我的思路就是参考org.codehaus.xfire.spring.remoting.XFireClientFactoryBean,将这些属性配置扩展上去。
查看xfire源码,找到了org.codehaus.xfire.service.binding.ObjectServiceFactory.java程序里面的436行:
setProperties(endpoint, properties);
这里就是读入配置,向Service里面写的地方了,参考这里的实现,修改了XFireClientFactory.java如下:
package com.sillycat.core.commons.plugins.webservice.xfire;
import java.net.MalformedURLException;
import java.util.Iterator;
import java.util.Map;
import org.apache.commons.logging.Log;
import org.apache.commons.logging.LogFactory;
import org.codehaus.xfire.client.XFireProxyFactory;
import org.codehaus.xfire.service.Service;
import org.codehaus.xfire.service.binding.ObjectServiceFactory;
import org.springframework.beans.factory.FactoryBean;
import org.springframework.util.Assert;
public class XFireClientFactory implements FactoryBean {
private static XFireProxyFactory serviceFactory = new XFireProxyFactory();
private static final Log log = LogFactory.getLog(XFireClientFactory.class);
private String serviceURL;
private String serviceClassName;
// hold the properties
private Map<String, String> _properties;
public Map<String, String> getProperties() {
return _properties;
}
/**
* Set the properties for the Client.
*/
public void setProperties(Map<String, String> properties) {
this._properties = properties;
}
private XFireClientFactory() {
}
public Object getObject() throws Exception {
String url = this.getServiceURL();
Class<?> sClass = null;
try {
sClass = Class.forName(this.getServiceClassName());
} catch (ClassNotFoundException e) {
log.error(e.getMessage(), e);
return null;
}
Assert.notNull(url);
Assert.notNull(sClass);
Service serviceModel = new ObjectServiceFactory().create(sClass);
setProperties(serviceModel, this.getProperties());
try {
return serviceFactory.create(serviceModel, url);
} catch (MalformedURLException e) {
log.error(e.getMessage(), e);
return null;
}
}
@SuppressWarnings("unchecked")
private void setProperties(Service service, Map<String, String> properties) {
if (properties == null) {
return;
}
for (Iterator<?> itr = properties.entrySet().iterator(); itr.hasNext();) {
Map.Entry entry = (Map.Entry) itr.next();
service.setProperty((String) entry.getKey(), entry.getValue());
}
}
public Class<?> getObjectType() {
Class<?> sClass = null;
try {
sClass = Class.forName(this.getServiceClassName());
} catch (ClassNotFoundException e) {
log.error(e.getMessage(), e);
return null;
}
return sClass;
}
public boolean isSingleton() {
return true;
}
public String getServiceURL() {
return serviceURL;
}
public void setServiceURL(String serviceURL) {
this.serviceURL = serviceURL;
}
public String getServiceClassName() {
return serviceClassName;
}
public void setServiceClassName(String serviceClassName) {
this.serviceClassName = serviceClassName;
}
}
spring的配置文件,修改成为如下:
<bean name="userService"
class="com.sillycat.core.commons.plugins.webservice.xfire.XFireClientFactory">
<property name="serviceURL" value="${user.serviceURL}" />
<property name="serviceClassName" value="${user.serviceClassName}" />
<property name="properties">
<props>
<!-- 等待HttpConnectionManager从连接池中返回空闲连接的超时时间 -->
<prop key="http.connection.manager.timeout">1000</prop>
<!-- 等待建立连接的超时时间 -->
<prop key="http.connection.timeout">2000</prop>
<!-- 等待服务器返回数据超时时间 -->
<prop key="http.timeout">5000</prop>
<!-- 连接到单个服务器的连接数上限 -->
<prop key="max.connections.per.host">10</prop>
<!-- 连接到所有服务器的连接个数上限 -->
<prop key="max.total.connections">80</prop>
</props>
</property>
</bean>
测试一下,调用是没有问题的,至于这个properties生效没有,就需要多测试一下高并发的情况了。既然xfire有Factorybean,为啥当初我还要重复发明轮子,参考springside重新写一个呢。可能也是为了某个地方简单吧。记录一下,留着以后备用。另外每个service都配置一个,还显得比较繁琐,以后看能不能略微改改。
在高并发的情况下,我同事测试出来有个问题,说是client里面有并发限制,而且是写死在代码里面的default配置
private static final int DEFAULT_MAX_CONN_PER_HOST = 6;
我也查找了一下,在类org.codehaus.xfire.transport.http.CommonsHttpMessageSender.java里面。
那么怎么修改呢,我参考了如下一些BLOG:
http://hi.baidu.com/hao_holly/blog/item/5377ba244f925820d407429c.html
http://xtjjj.blog.sohu.com/149111514.html
http://xfire.codehaus.org/Client+API
由于我以前为了写client方便,自己写了一个FactoryBean
com.sillycat.core.commons.plugins.webservice.xfire.XFireClientFactory
所以,目前我的思路就是参考org.codehaus.xfire.spring.remoting.XFireClientFactoryBean,将这些属性配置扩展上去。
查看xfire源码,找到了org.codehaus.xfire.service.binding.ObjectServiceFactory.java程序里面的436行:
setProperties(endpoint, properties);
这里就是读入配置,向Service里面写的地方了,参考这里的实现,修改了XFireClientFactory.java如下:
package com.sillycat.core.commons.plugins.webservice.xfire;
import java.net.MalformedURLException;
import java.util.Iterator;
import java.util.Map;
import org.apache.commons.logging.Log;
import org.apache.commons.logging.LogFactory;
import org.codehaus.xfire.client.XFireProxyFactory;
import org.codehaus.xfire.service.Service;
import org.codehaus.xfire.service.binding.ObjectServiceFactory;
import org.springframework.beans.factory.FactoryBean;
import org.springframework.util.Assert;
public class XFireClientFactory implements FactoryBean {
private static XFireProxyFactory serviceFactory = new XFireProxyFactory();
private static final Log log = LogFactory.getLog(XFireClientFactory.class);
private String serviceURL;
private String serviceClassName;
// hold the properties
private Map<String, String> _properties;
public Map<String, String> getProperties() {
return _properties;
}
/**
* Set the properties for the Client.
*/
public void setProperties(Map<String, String> properties) {
this._properties = properties;
}
private XFireClientFactory() {
}
public Object getObject() throws Exception {
String url = this.getServiceURL();
Class<?> sClass = null;
try {
sClass = Class.forName(this.getServiceClassName());
} catch (ClassNotFoundException e) {
log.error(e.getMessage(), e);
return null;
}
Assert.notNull(url);
Assert.notNull(sClass);
Service serviceModel = new ObjectServiceFactory().create(sClass);
setProperties(serviceModel, this.getProperties());
try {
return serviceFactory.create(serviceModel, url);
} catch (MalformedURLException e) {
log.error(e.getMessage(), e);
return null;
}
}
@SuppressWarnings("unchecked")
private void setProperties(Service service, Map<String, String> properties) {
if (properties == null) {
return;
}
for (Iterator<?> itr = properties.entrySet().iterator(); itr.hasNext();) {
Map.Entry entry = (Map.Entry) itr.next();
service.setProperty((String) entry.getKey(), entry.getValue());
}
}
public Class<?> getObjectType() {
Class<?> sClass = null;
try {
sClass = Class.forName(this.getServiceClassName());
} catch (ClassNotFoundException e) {
log.error(e.getMessage(), e);
return null;
}
return sClass;
}
public boolean isSingleton() {
return true;
}
public String getServiceURL() {
return serviceURL;
}
public void setServiceURL(String serviceURL) {
this.serviceURL = serviceURL;
}
public String getServiceClassName() {
return serviceClassName;
}
public void setServiceClassName(String serviceClassName) {
this.serviceClassName = serviceClassName;
}
}
spring的配置文件,修改成为如下:
<bean name="userService"
class="com.sillycat.core.commons.plugins.webservice.xfire.XFireClientFactory">
<property name="serviceURL" value="${user.serviceURL}" />
<property name="serviceClassName" value="${user.serviceClassName}" />
<property name="properties">
<props>
<!-- 等待HttpConnectionManager从连接池中返回空闲连接的超时时间 -->
<prop key="http.connection.manager.timeout">1000</prop>
<!-- 等待建立连接的超时时间 -->
<prop key="http.connection.timeout">2000</prop>
<!-- 等待服务器返回数据超时时间 -->
<prop key="http.timeout">5000</prop>
<!-- 连接到单个服务器的连接数上限 -->
<prop key="max.connections.per.host">10</prop>
<!-- 连接到所有服务器的连接个数上限 -->
<prop key="max.total.connections">80</prop>
</props>
</property>
</bean>
测试一下,调用是没有问题的,至于这个properties生效没有,就需要多测试一下高并发的情况了。既然xfire有Factorybean,为啥当初我还要重复发明轮子,参考springside重新写一个呢。可能也是为了某个地方简单吧。记录一下,留着以后备用。另外每个service都配置一个,还显得比较繁琐,以后看能不能略微改改。
发表评论
-
Update Site will come soon
2021-06-02 04:10 1679I am still keep notes my tech n ... -
Portainer 2020(4)Deploy Nginx and Others
2020-03-20 12:06 431Portainer 2020(4)Deploy Nginx a ... -
Private Registry 2020(1)No auth in registry Nginx AUTH for UI
2020-03-18 00:56 436Private Registry 2020(1)No auth ... -
Docker Compose 2020(1)Installation and Basic
2020-03-15 08:10 374Docker Compose 2020(1)Installat ... -
VPN Server 2020(2)Docker on CentOS in Ubuntu
2020-03-02 08:04 456VPN Server 2020(2)Docker on Cen ... -
Nginx Deal with OPTIONS in HTTP Protocol
2020-02-15 01:33 356Nginx Deal with OPTIONS in HTTP ... -
PDF to HTML 2020(1)pdftohtml Linux tool or PDFBox
2020-01-29 07:37 405PDF to HTML 2020(1)pdftohtml Li ... -
Elasticsearch Cluster 2019(2)Kibana Issue or Upgrade
2020-01-12 03:25 721Elasticsearch Cluster 2019(2)Ki ... -
Spark Streaming 2020(1)Investigation
2020-01-08 07:19 295Spark Streaming 2020(1)Investig ... -
Hadoop Docker 2019 Version 3.2.1
2019-12-10 07:39 295Hadoop Docker 2019 Version 3.2. ... -
MongoDB 2019(3)Security and Auth
2019-11-16 06:48 241MongoDB 2019(3)Security and Aut ... -
MongoDB 2019(1)Install 4.2.1 Single and Cluster
2019-11-11 05:07 294MongoDB 2019(1) Follow this ht ... -
Monitor Tool 2019(1)Monit Installation and Usage
2019-10-17 08:22 325Monitor Tool 2019(1)Monit Insta ... -
Ansible 2019(1)Introduction and Installation on Ubuntu and CentOS
2019-10-12 06:15 312Ansible 2019(1)Introduction and ... -
Timezone and Time on All Servers and Docker Containers
2019-10-10 11:18 332Timezone and Time on All Server ... -
Kafka Cluster 2019(6) 3 Nodes Cluster on CentOS7
2019-10-05 23:28 283Kafka Cluster 2019(6) 3 Nodes C ... -
K8S Helm(1)Understand YAML and Kubectl Pod and Deployment
2019-10-01 01:21 326K8S Helm(1)Understand YAML and ... -
Rancher and k8s 2019(5)Private Registry
2019-09-27 03:25 362Rancher and k8s 2019(5)Private ... -
Jenkins 2019 Cluster(1)Version 2.194
2019-09-12 02:53 444Jenkins 2019 Cluster(1)Version ... -
Redis Cluster 2019(3)Redis Cluster on CentOS
2019-08-17 04:07 373Redis Cluster 2019(3)Redis Clus ...
相关推荐
xfire是一款历史悠久的在线游戏平台,它在2004年由GameSpy Industries开发并发布,主要功能是为玩家提供即时通讯、好友列表、游戏内聊天和游戏统计等功能,旨在增强玩家的游戏体验。xfire 1.26是该平台的一个特定...
此外,JDK 1.4 的内存管理和多线程处理能力相对较弱,可能会影响 XFire 在高并发场景下的性能。 在 xfire-distribution-1.2.3 包中,包含的主要文件是 `xfire-1.2.3`,这通常是一个包含了 XFire 框架的 JAR 文件,...
7. **负载均衡**:随着用户数量的增长,Xfire可能部署了多个web服务器实例,通过负载均衡技术分发流量,以确保服务的稳定性和高可用性。 8. **性能优化**:为了处理大量并发请求,Xfire可能采用了缓存策略(如Redis...
作为游戏服务器解决方案,XFire在设计时考虑了安全性和稳定性,如防止DDoS攻击、保证网络通信的加密以及优化服务器性能以处理大量并发连接。 8. **社区支持**: 开源项目如XFire通常有活跃的开发者社区,提供文档...
测试要确保在高负载下服务端的稳定性和性能。 4. **错误处理与异常处理**:测试会覆盖各种可能的错误场景,比如网络中断、无效数据等,以确保程序有良好的错误处理机制。 5. **安全性**:测试还需要涵盖安全方面,...
2. **异步处理**:xfire支持异步调用,这对于大数据量或高并发的数据同步场景尤为关键,可以避免同步操作引起的阻塞问题。 3. **错误处理与重试机制**:xfire提供的异常处理机制可以帮助服务端应对数据同步过程中...
作为一个高度可定制的网络通信库,xfire服务端支持TCP/IP和UDP协议,能够处理大量的并发连接,特别适合需要实时交互的游戏场景。 二、核心技术与特性 1. **多线程处理**:xfire服务端采用了多线程模型,能够有效...
在部署时,要注意服务器的配置和网络环境,确保项目能够在各种环境下稳定运行。 总的来说,Xfire接口项目结合了网络编程、GUI编程、API调用等多种技术,对于学习和实践这些技能有着很高的参考价值。通过理解并实现...
5. **多线程与并发**:为了保证软件的高性能和响应性,Xfire的源码会涉及到多线程和并发控制。这包括主线程处理UI更新,后台线程负责网络通信和数据处理,以及线程间通信的同步机制。 6. **配置与资源管理**:源码...
测试文件通常用于验证代码的正确性,确保认证流程在各种情况下都能正常运行。通过分析这些测试用例,开发者可以更好地理解代码的行为,找出潜在的问题,并优化认证过程。 总的来说,理解和研究Xfire的认证机制不仅...
对于高并发的服务器端,需要考虑性能优化,如缓存策略、负载均衡、数据库优化等,以确保服务的稳定性和响应速度。 8. **监控和维护** 为了保证服务的正常运行,需要持续监控服务器性能、错误日志和用户体验,及时...
4. **高性能应用**:通过使用高效的序列化技术,Xfire可以在高并发场景下保持良好的性能表现。 #### 五、Xfire的使用示例 下面给出一个简单的Xfire Web服务实现示例: ```java import org.codehaus.xfire.XFire; ...
不过,需要注意的是,静态List不适合大数据量或高并发场景,因为所有数据都驻留在内存中,可能会导致内存溢出。在实际开发中,通常会使用数据库来存储和检索数据,以提供更好的性能和可扩展性。 总的来说,XFire ...
手册可能会深入分析XFire的性能瓶颈,比如在高并发情况下如何优化服务响应时间,以及在大数据量传输时如何减少延迟和提高吞吐量。这些内容对于希望开发高性能网络应用的开发者来说至关重要。 最后,《XFire第二次...
XFire设计时考虑了性能问题,通过高效的编解码器和最小化的XML处理,它在处理高并发请求时表现优秀。 通过以上介绍,我们可以了解到XFire接口开发的核心概念和操作流程。在实际开发中,掌握这些知识点可以帮助我们...
它支持多种协议,包括HTTP、HTTPS、FTP、JDBC等,可以模拟多个用户并发执行测试脚本,以评估系统在高负载下的性能和稳定性。JMeter提供了丰富的插件和自定义选项,可用于测试各种类型的服务器和应用,如Web服务、...
2. **性能优化**:虽然XFire是轻量级的,但在处理大量并发请求时,可能需要进行性能调优。这可能涉及到缓存策略、线程池配置等。 3. **安全性**:Web服务需要保护免受恶意攻击,XFire支持WS-Security等安全标准,但...
它能够处理大量的并发请求,并且在处理大型数据时表现良好。 ### 10. 结论 XFire4PHP是一个强大且灵活的PHP5 SOAP框架,对于那些希望在PHP环境中采用SOA架构的开发者来说,是一个理想的选择。通过其易于使用和标准...