fxlrpc / 序列化
FXMLRPC 的序列化逻辑
0.2.0
2018-02-11 12:18 UTC
Requires
- php: ^5.6 || ^7.0
Requires (Dev)
- ext-xmlreader: *
- ext-xmlrpc: *
- ext-xmlwriter: *
- behat/behat: ^3.0
- doctrine/instantiator: ^1.0.5
- henrikbjorn/phpspec-code-coverage: ^3.0
- phpbench/phpbench: ^0.13 || ^0.14
- phpspec/phpspec: ^3.0 || ^4.0
- phpunit/phpunit: ^5.7 || ^6.4 || ^7.0
- webmozart/assert: ^1.0
- zendframework/zend-xmlrpc: ^2.3.2
Suggests
- ext-xmlreader: Used in SAX serialization logic
- ext-xmlrpc: Used in native serialization logic
- ext-xmlwriter: Used in SAX serialization logic
- zendframework/zend-xmlrpc: Used in Zend serialization wrapper
This package is auto-updated.
Last update: 2024-09-19 09:10:33 UTC
README
FXMLRPC 的序列化逻辑。
安装
通过 Composer
$ composer require fxmlrpc/serialization
用法
这是 FXMLRPC 中使用的序列化逻辑的合同包。
目前有以下实现可用
- 本地:使用 XML-RPC 扩展
- XML 读取器:使用位掩码的自定义 XML 读取逻辑
- Zend 框架适配器
它真的有多快?
从用户空间的角度来看,I/O 性能难以达到,但解析和序列化速度才是关键。我们能否快速从 PHP 数据结构生成 XML 负载,以及我们能否快速解析服务器的响应?FXMLRPC 使用基于流的 XML 写入器/读取器来实现其性能,并对它进行了大量优化(可读性较差)。因此,用户空间的版本仅比本地 C 实现慢约 2 倍(ext/xmlrpc)。
8 subjects, 80 iterations, 320 revs, 0 rejects
min mean max: 11,497.750 118,279.634 339,007.500 (μs/r)
⅀T: 37,849,483.000μs μSD/r 5,275.433μs μRSD/r: 6.047%
+-----------------+-----------------------+-------+------+-----+-------------+----------------+----------------+----------------+---------------+--------+
| benchmark | subject | group | revs | its | mem | min | mean | max | stdev | rstdev |
+-----------------+-----------------------+-------+------+-----+-------------+----------------+----------------+----------------+---------------+--------+
| ParserBench | benchNativeParser | | 40 | 10 | 15,644,120b | 118,311.2500μs | 123,752.2250μs | 127,034.7500μs | 2,196.4803μs | 1.77% |
| ParserBench | benchSaxParser | | 40 | 10 | 15,594,984b | 144,438.0000μs | 149,607.9000μs | 157,309.2500μs | 3,892.3376μs | 2.60% |
| ParserBench | benchZendParser | | 40 | 10 | 56,321,216b | 278,974.5000μs | 287,957.9750μs | 317,007.5000μs | 10,655.0098μs | 3.70% |
| SerializerBench | benchNativeSerializer | | 40 | 10 | 12,420,416b | 11,497.7500μs | 12,464.6500μs | 15,255.5000μs | 1,416.8554μs | 11.37% |
| SerializerBench | benchSaxSerializer | | 40 | 10 | 15,460,152b | 22,643.2500μs | 24,231.8250μs | 26,539.7500μs | 1,411.6560μs | 5.83% |
| SerializerBench | benchZendSerializer | | 40 | 10 | 15,671,376b | 21,832.5000μs | 24,071.2500μs | 28,176.2500μs | 1,948.6380μs | 8.10% |
+-----------------+-----------------------+-------+------+-----+-------------+----------------+----------------+----------------+---------------+--------+
运行 ./vendor/bin/phpbench run --report=custom
以执行基准测试套件。
Zend 不兼容列表
Zend 与其他序列化器和解析器不完全兼容。
解析器不兼容
- 自动解码 Base64 编码的值
- 不返回 DateTime 对象
- 不能返回空 DateTime 值
- 不支持 Apache Nil
- 错误地检测无效的多参数
- 不能解析包含 XXE 攻击 的响应
序列化器不兼容
- 如果没有传递参数,则不生成空参数标签
- 与 xmlrpc 扩展不同,Zend 不会添加 换行符
测试
$ composer test
安全
如果您发现任何与安全相关的问题,请通过 security@fxmlrpc.org 联系我们。
致谢
许可证
MIT 许可证(MIT)。有关更多信息,请参阅 许可证文件。