Strategies/Goals
Firewalls. The goal of this protocol is to lay a compatible foundation across different environments, no new power is provided beyond the capabilities of the CGI interface. Firewall software can watch for POSTs whose Content-Type is text/xml.
Discoverability. We wanted a clean, extensible format that's very simple. It should be possible for an HTML coder to be able to look at a file containing an XML-RPC procedure call, understand what it's doing, and be able to modify it and have it work on the first or second try.
Easy to implement. We also wanted it to be an easy to implement protocol that could quickly be adapted to run in other environments or on other operating systems.
原帖由 yulihua49 于 2009-10-10 16:05 发表
在网络上,各种不同系统,二进制不方便。
实际上是用模板映射结构,要很仔细保持模板和结构的关系。
使用xml格式做模板效率较低,在C语言里我更喜欢用结构做模板,其他语言可以用xml。
我也搞了一个JSON ...
原帖由 iunknown 于 2009-1-22 07:06 发表
SPDataPickle 是一个用于在 C语言的结构体和 xml/json 之间做自动转化的库。
http://code.google.com/p/spdatapickle
http://spdatapickle.googlecode.c ... ckle-0.5.src.tar.gz
大家可能对 ...
原帖由 emacsnw 于 2009-11-7 13:17 发表
大概看了一下代码。有个疑问。
假如用你的代码来实现RPC。传入的是序列化的一个结构体,但是反序列化的机器上假如对应的描述文件比较旧,多了一个不用的field或者少一个新加的field,反序列化还能成功吗( ...
原帖由 iunknown 于 2009-11-7 00:30 发表
这个问题主要和反序列化的时候,以什么为依据有关。
一个是以数据包为依据,数据包里面有什么数据,就一定要在 struct 中找到对应的 field;
一个是以struct为依据,struct 有什么字段,就从数据包中找对 ...
原帖由 emacsnw 于 2009-11-7 16:39 发表
简单看了一下你的解码代码,好像解码的时候没有对不认识的field进行处理,直接丢弃了?
这样的话,wire过来的bytes你如果用了一个比如是旧版本的解码器,那么数据里有几个fields不认识,忽略,使用的时候没问题。
如果你再把刚解码得到的结构体wire出去,别人受到的就不是原来的。
google protocol buffer是通过unknown_field_set来存储这些fields,这样wire回去的时候可以附上,不会损失信息。
这样是不是比较好一点?
yulihua49 发表于 2009-10-10 16:05
我没有采取XML或JSON定义模板,主要是感觉在一个大型事务系统里,要附带一大堆XML文件挺累赘的,何况这些文件在运行时环境里,万一被改动,程序就死掉不明不白。
我的模板是在编译环境里,运行时看不见。所以安全一些。
欢迎光临 Chinaunix (http://bbs.chinaunix.net/) | Powered by Discuz! X3.2 |