论坛首页 Java版 企业应用

通讯格式JSON or XML?

浏览 11304 次
精华帖 (0) :: 良好帖 (0) :: 新手帖 (0) :: 隐藏帖 (0)
作者 正文
时间:2008-08-05
项目的大体架构是这样的:

服务段采用的是 java ,客户端采用的是c++。

以前的和客户端通讯采用的是webservice(AIXS),客户端(100+)和中心端的通讯很频繁,但是客户端的机器配置客户要求普通PC机(1G的内存)即可胜任

我们测试下来发现webservice的通讯对性能的影响很大,达不到原来的设计要求,java进程在每次通讯后基本看不到有明显回收的迹象,因此想把webservice去掉,改为http的通讯方式,即以字符串的拼接来完成数据。但是这样有一个问题,原来的服务端的很多返回数据都以如下格式组织的

public class User {

	private String name ;
	
	private String password ;
	
	private int age;
	
	private String  sex ;
	
	private  boolean status ;
	
	private ArrayList list ;
	
	private UserInfo info ;

	private byte[] photo ;
       


如果以字符串的方式返回,就势必使我们很多的地方要做大的修改,业务逻辑也会有大的拆分。

于是我想到了JSON,能够很好的使用原有的接口和返回对象,不过客户端那边似乎没有很好的JSON的C++的类库扩展,
解析起来很是麻烦。

不知道大家有什么好的建议?
   
时间:2008-08-05
JSON的C++的类库还是有的,去 http://www.josn.org 看看。
   
2 请登录后投票
时间:2008-08-05

1、服务端自己拼字符串生成xml

2、会重用的数据,缓存xml,这点很重要

   
1 请登录后投票
时间:2008-08-05
myy 写道
JSON的C++的类库还是有的,去 http://www.josn.org 看看。


貌似没有合适的,能向webservice那样一劳永逸的解决问题。。。
   
1 请登录后投票
时间:2008-08-05
m7788 写道

1、服务端自己拼字符串生成xml

2、会重用的数据,缓存xml,这点很重要



谢谢指点。。

1 我们生成XML绝大部分采用的是JAXB,测试下来的确存在性能问题,不过我们有时候数据结构很复杂,比如:list里面装对象,该对象里面有存在list。。

2 每次返回给客户端的数据都是实时的,也就是说需要在数据库或者内存中query生成,不过缓存XML倒是提供了一条很好的思路,给客户端比较单一的command 倒是可以如此。
   
1 请登录后投票
时间:2008-08-05
我是说缓存单条记录,查询时只返回id,以id为key查出xml,看需要可以更新缓存
   
1 请登录后投票
时间:2008-08-05
m7788 写道
我是说缓存单条记录,查询时只返回id,以id为key查出xml,看需要可以更新缓存

您说的缓存是这个样子的啊

嗯 根据我们的业务其实很难,因为数据的组合有很多种的,比如客户端的登录认证,当前使用客户端的实时信息,每隔一段时间的合法性校验,当前使用某个客户端的用户的实时信息等等,这些个通讯的载体都是XML,如果缓存的话势必要在内存中维护很多个放XML的Map。

 

 

   
0 请登录后投票
时间:2008-08-05
看楼主这样的描述,情况如果真的是对象集合一起嵌套。。。确实会存在很大问题。别说慢,有时候甚至会down机。像楼主说的放入map,也有问题:是否想到过,如果数据量非常大,会产生数据冲突问题 1.缓存是一个对策 2.根本的问题还是数据结构的解决。
   
1 请登录后投票
时间:2008-08-05
没听说过axis2有性能问题,加几根内存条好了再强制回收回收。个人觉得放弃webservice比较搞笑。
   
1 请登录后投票
时间:2008-08-05
black_zerg 写道
没听说过axis2有性能问题,加几根内存条好了再强制回收回收。个人觉得放弃webservice比较搞笑。

 

在代码里面强行的GC,我们也做过,但在 jprofiler 中查看并没有明显的改善。

至于加几根内存,呵呵,客户不同意,最多上到1G

   
1 请登录后投票
论坛首页 Java版 企业应用

跳转论坛:
JavaEye推荐