现在的位置: 首页 > 综合 > 正文

funambol-联系人格式解析的优化

2018年04月14日 ⁄ 综合 ⁄ 共 2949字 ⁄ 字号 评论关闭

一、测试条件(LoadRunner)            

(1)测试并发人数:20人(有聚集点)

(2)事务完成的思考时间:1s
(3)一个事务包含4次请求(一个完整的同步过程)
(4)持续时间:30分钟
(5)联系人数量:350    
(6)硬件环境(虚拟机):
     CentOS5(2.6.18-164.el5内核)
     4G内存
     双核CPU
                    
二、测试结果
top观察服务器的状态:
vcard:60%-80%
json:20%-30%
protobuf:7%-10%(因为protobuf转换成字符串之后又特殊字符,
                 在xml中无法解析,故加入base64的加解码,
                 同时数据传输也会减低很多)
                
三、优化
对json,只要按照JSONArray的字符串格式传输即可。
对于protobuf,需要定义自己的proto文件,如下:

// See README.txt for information and build instructions.

package com.test.pim.common;

option java_package = "com.test.pim.common";
option java_outer_classname = "ContactProtos";

message Contact {
    optional Name name = 1;
	optional Organization org = 2;
	repeated PhoneEntry phones = 3;
	repeated EmailEntry emails = 4;
	repeated WebPageEntry webpages = 5;
	repeated AddressEntry addresses = 6;
	repeated OnlineMessageEntry onlineMessages = 7;
	repeated string groups = 8;
	repeated string notes = 9;
	optional string birthday = 10;
	
	//Name Definition
	message Name {
		optional string firstName = 1;
		optional string middleName = 2;
		optional string lastName = 3;
		optional string suffix = 4;
		optional string prefix = 5;
		optional string nickName = 6;
	}
	
	//Organization Definition
	message Organization {
		optional string company = 1;
		optional string department = 2;
		optional string jobTitle = 3;
	}
	
	//Phone Definition
	message PhoneEntry {
	  enum PhoneType {
			MOBILE = 0;
			HOME = 1;
			WORK = 2;
			WORKFAX = 3;
			HOMEFAX = 4;
			OTHERFAX = 5;
			OTHER = 6;
			CAR = 7;
			ISDN = 8;
			CUSTOM = 9;
		}
	  optional string label = 1;
	  required PhoneType type = 2 [default = MOBILE]; 
	  required string value = 3;
	}
	
	//Email Definition
	message EmailEntry {
	  enum EmailType {
			HOME = 0;
			WORK = 1;
			OTHER = 2;
			CUSTOM = 3;
		}
	  optional string label = 1;
	  required EmailType type = 2 [default = HOME]; 
	  required string value = 3;
	}
	
	//WebPage Definition
	message WebPageEntry {
	  enum WebPageType {
			HOME = 0;
			BLOG = 1;
			WORK = 2;
			OTHER = 3;
			CUSTOM = 4;
		}
	  optional string label = 1;
	  required WebPageType type = 2 [default = HOME]; 
	  required string value = 3;
	}
  
	//Address Definition
	message AddressEntry {
	  enum AddressType {
			HOME = 0;
			WORK = 1;
			OTHER = 2;
			CUSTOM = 3;
		}
	  optional string label = 1;
	  required AddressType type = 2 [default = HOME]; 
	  required AddressExtend value = 3;
	}
	message AddressExtend {
		optional string street = 1;
		optional string city = 2;
		optional string state = 3;
		optional string postcode = 4;
		optional string country = 5;
	}
	
	//OnlineMessage Definition
	message OnlineMessageEntry {
	  enum OnlineMessageType {
			QQ = 0;
			MSN = 1;
			SKYPE = 2;
			GOOGLETALK = 3;
			AIM = 4;
			YAHOO = 5;
			ICQ = 6;
			JABBER = 7;
		}
	  optional string label = 1;
	  required OnlineMessageType type = 2 [default = QQ]; 
	  required string value = 3;
	}
}

数据构造发送代码:

 ContactProtos.Contact.Builder contact =
 ContactProtos.Contact.newBuilder();
 contact.setName(ContactProtos.Contact.Name.newBuilder().setLastName("testProtobuf").build());
 contact.addPhones(ContactProtos.Contact.PhoneEntry.newBuilder().setType(ContactProtos.Contact.PhoneEntry.PhoneType.HOME)
				 .setValue("425900").build());
				 contact.addPhones(ContactProtos.Contact.PhoneEntry.newBuilder().setType(ContactProtos.Contact.PhoneEntry.PhoneType.MOBILE)
				 .setValue("13163209158").build());
 byte[] encode = Base64.encode(contact.build().toByteArray());
 xml.append(new String(encode, "UTF-8"));

服务端解析代码:

ContactProtos.Contact c = ContactProtos.Contact.parseFrom(Base64.decode(data.getData().getBytes("UTF-8")));

抱歉!评论已关闭.