`
sillycat
  • 浏览: 2552717 次
  • 性别: Icon_minigender_1
  • 来自: 成都
社区版块
存档分类
最新评论

xfire在高并发下的问题

    博客分类:
  • JAVA
阅读更多
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都配置一个,还显得比较繁琐,以后看能不能略微改改。


分享到:
评论
1 楼 luju133 2012-07-07  
   xFire

相关推荐

    xfire

    xfire是一款历史悠久的在线游戏平台,它在2004年由GameSpy Industries开发并发布,主要功能是为玩家提供即时通讯、好友列表、游戏内聊天和游戏统计等功能,旨在增强玩家的游戏体验。xfire 1.26是该平台的一个特定...

    xfire-distribution-1.2.3

    此外,JDK 1.4 的内存管理和多线程处理能力相对较弱,可能会影响 XFire 在高并发场景下的性能。 在 xfire-distribution-1.2.3 包中,包含的主要文件是 `xfire-1.2.3`,这通常是一个包含了 XFire 框架的 JAR 文件,...

    Xfire案例,webserver——Xfire案例

    7. **负载均衡**:随着用户数量的增长,Xfire可能部署了多个web服务器实例,通过负载均衡技术分发流量,以确保服务的稳定性和高可用性。 8. **性能优化**:为了处理大量并发请求,Xfire可能采用了缓存策略(如Redis...

    XFire服务器端所用的jar

    作为游戏服务器解决方案,XFire在设计时考虑了安全性和稳定性,如防止DDoS攻击、保证网络通信的加密以及优化服务器性能以处理大量并发连接。 8. **社区支持**: 开源项目如XFire通常有活跃的开发者社区,提供文档...

    xfire客户端服务端测试样例

    测试要确保在高负载下服务端的稳定性和性能。 4. **错误处理与异常处理**:测试会覆盖各种可能的错误场景,比如网络中断、无效数据等,以确保程序有良好的错误处理机制。 5. **安全性**:测试还需要涵盖安全方面,...

    xfire数据同步服务端

    2. **异步处理**:xfire支持异步调用,这对于大数据量或高并发的数据同步场景尤为关键,可以避免同步操作引起的阻塞问题。 3. **错误处理与重试机制**:xfire提供的异常处理机制可以帮助服务端应对数据同步过程中...

    xfire服务端

    作为一个高度可定制的网络通信库,xfire服务端支持TCP/IP和UDP协议,能够处理大量的并发连接,特别适合需要实时交互的游戏场景。 二、核心技术与特性 1. **多线程处理**:xfire服务端采用了多线程模型,能够有效...

    xfire接口项目(Server+Client)

    在部署时,要注意服务器的配置和网络环境,确保项目能够在各种环境下稳定运行。 总的来说,Xfire接口项目结合了网络编程、GUI编程、API调用等多种技术,对于学习和实践这些技能有着很高的参考价值。通过理解并实现...

    Xfire源码

    5. **多线程与并发**:为了保证软件的高性能和响应性,Xfire的源码会涉及到多线程和并发控制。这包括主线程处理UI更新,后台线程负责网络通信和数据处理,以及线程间通信的同步机制。 6. **配置与资源管理**:源码...

    Xfire 认证

    测试文件通常用于验证代码的正确性,确保认证流程在各种情况下都能正常运行。通过分析这些测试用例,开发者可以更好地理解代码的行为,找出潜在的问题,并优化认证过程。 总的来说,理解和研究Xfire的认证机制不仅...

    XFire Webservice 服务器端

    对于高并发的服务器端,需要考虑性能优化,如缓存策略、负载均衡、数据库优化等,以确保服务的稳定性和响应速度。 8. **监控和维护** 为了保证服务的正常运行,需要持续监控服务器性能、错误日志和用户体验,及时...

    Xfire实战[Web服务开发之旅]

    4. **高性能应用**:通过使用高效的序列化技术,Xfire可以在高并发场景下保持良好的性能表现。 #### 五、Xfire的使用示例 下面给出一个简单的Xfire Web服务实现示例: ```java import org.codehaus.xfire.XFire; ...

    XFire Web Service

    不过,需要注意的是,静态List不适合大数据量或高并发场景,因为所有数据都驻留在内存中,可能会导致内存溢出。在实际开发中,通常会使用数据库来存储和检索数据,以提供更好的性能和可扩展性。 总的来说,XFire ...

    “XFire第二次修订版开发手册”

    手册可能会深入分析XFire的性能瓶颈,比如在高并发情况下如何优化服务响应时间,以及在大数据量传输时如何减少延迟和提高吞吐量。这些内容对于希望开发高性能网络应用的开发者来说至关重要。 最后,《XFire第二次...

    xfire接口开发

    XFire设计时考虑了性能问题,通过高效的编解码器和最小化的XML处理,它在处理高并发请求时表现优秀。 通过以上介绍,我们可以了解到XFire接口开发的核心概念和操作流程。在实际开发中,掌握这些知识点可以帮助我们...

    XFire + Apache TCPMon + Apache jemeter

    它支持多种协议,包括HTTP、HTTPS、FTP、JDBC等,可以模拟多个用户并发执行测试脚本,以评估系统在高负载下的性能和稳定性。JMeter提供了丰富的插件和自定义选项,可用于测试各种类型的服务器和应用,如Web服务、...

    xfire实现webService

    2. **性能优化**:虽然XFire是轻量级的,但在处理大量并发请求时,可能需要进行性能调优。这可能涉及到缓存策略、线程池配置等。 3. **安全性**:Web服务需要保护免受恶意攻击,XFire支持WS-Security等安全标准,但...

    XFire4PHP-开源

    它能够处理大量的并发请求,并且在处理大型数据时表现良好。 ### 10. 结论 XFire4PHP是一个强大且灵活的PHP5 SOAP框架,对于那些希望在PHP环境中采用SOA架构的开发者来说,是一个理想的选择。通过其易于使用和标准...

Global site tag (gtag.js) - Google Analytics