XML-RPC:处理64位值的最佳方法?
所以,官方的XML-RPC标准不支持64位的数值。不过在现在这个时代,64位的数值越来越普遍了。
那你们是怎么处理这些64位数值的呢?有哪些常见的XML-RPC扩展可以用?还有哪些编程语言的支持呢?我特别对Python和C++感兴趣,但任何信息我都很欢迎。
4 个回答
0
我对如何扩展XMLRPC一点都不了解,不过我找到了一封关于这个话题的邮件:
在XML-RPC中,所有的数据都是以字符串的形式传输的,所以我觉得这种选择其实也没那么糟糕——当然,这样做会让调用转换函数变得有点麻烦。
不过,XML-RPC确实没有办法表示大于2的32次方的整数。如果你能接受精度的损失,可以使用双精度浮点数(但发送方还是需要手动进行转换)。
1
现在,"i8"这个数据类型越来越常用了。我最近在我的Perl XML-RPC模块中加入了这个类型,原因是有一个大团队需要它来和一个用Java写的服务器配合工作。我不知道那个服务器用了什么工具包,但它已经能接受i8作为一种类型了。
我觉得还有一个问题需要解决,那就是“int”这个别名是否也应该接受i8,就像现在它能接受i4一样。或者说,如果一个参数被标记为i8,是否也应该默默地接受一个标记为i4的输入。XML-RPC作为一种轻量级、低开销的协议,潜力很大,特别是在你不需要SOAP那种全面支持的时候,但在REST和SOAP的争论中,它常常被忽视。
XML-RPC确实需要一些更新和修订,如果我们能让原作者同意的话就好了……
7
确实有一些库支持64位扩展,但似乎没有统一的标准。比如说,xmlrpc-c有一个叫做i8的东西,但它在Python中似乎不能正常工作(至少默认情况下是这样)。
我建议你可以选择以下两种方法:
- 手动把整数转换成字符串,然后发送。反正XMLRPC会把它转换成字符串,所以这样做是合理的。
- 把这个整数拆分成两个32位的整数,然后发送。