博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
tokyo tyrant 在 php 上不能自动反序列化的问题
阅读量:3604 次
发布时间:2019-05-20

本文共 829 字,大约阅读时间需要 2 分钟。

版权声明:转载时请以超链接形式标明文章原始出处和作者信息及本声明

http://syre.blogbus.com/logs/29771714.html

前一阵试用 tokyo tyrant 碰到一个麻烦,

在php上用memcache接口,取出数据的时候,不会自动反序列化。比如了一个 array(1,2,3,4,5),出来就是 'a:5:{i:0;i:1;i:1;i:2;i:2;i:3;i:3;i:4;i:4;i:5;}' 了。

用 Wireshark 跟踪了一下,发现和标准memcached返回的数据里差一个字节。去看了下 memcached 协议,发现这个字节是个客户端的标记 flag 。存储的时候放置这个标志,取的时候照样返回。php 的 memcache 扩展应该就是用这个字节来标志是否是 php 的数据。如果匹配则反序列化。对比 tokyo tyrant 的源代码,发现它在存取的时候无视了这个标记位(其实还无视了一些其他东西,比如过期时间之类的,只用了 key 和 value 以及他们的长度),所以就有了这个结果。

之前考虑改 tokyo tyrant ,做了个补丁。不过正如 xdanger 所说,这个办法不好。之前测试得不仔细,后来试了几个不同的类型,果然是出了问题。于是又考虑再改 php 的客户端。让它不管什么类型存储的时候都去做序列号。似乎是解决了反序列号问题。这样修改版的客户端放的东西原版的能正常读取,但原版客户端一旦放了常规值就会出毛病。这一下同时改了客户端和服务端,另外,压缩的问题也还是没解决。看来这个问题还真的很难。

php 客户端补丁,修改 memcache.c

 http://syre.blogbus.com/files/12229540080.diff

 tokyo tyrant 补丁,修改 ttserver.c

http://syre.blogbus.com/files/12227686210.diff

你可能感兴趣的文章
Matrixport首席执行官葛越晟:区块链市场具有充足的流动性及高溢价
查看>>
量子链创始人帅初:平台和应用需要具备区块链特征,但不一定需要去中心化...
查看>>
印度加密交易所解禁:交易量暴增6倍,全球Buy in了吗?
查看>>
明年3月实施!韩国通过特别金融法案,加密货币完全合法化
查看>>
7种启动Spring Boot项目的方式,一次性打包说给你听
查看>>
《Spring Cloud与Docker微服务架构实战》.pdf
查看>>
Vue表单上传带多张图片上传加预览,支持手机拍照上传
查看>>
Js动态生成Div、带属性。append()和appendChild()
查看>>
整合trtc遇到的坑:<ERROR> navigator.mediaDevices is undefined
查看>>
前端实现视频在线预览插件之video.js上手
查看>>
【Unity】删除所有子物体保留父物体的2种方式
查看>>
基本组件操作
查看>>
Time模块
查看>>
InputModule
查看>>
Unity3D Waypoint (路点)
查看>>
同步延时问题解决方案
查看>>
面试题总结
查看>>
简易小地图制作重点
查看>>
Lua中的元表元方法
查看>>
第九章 质量与变更管理
查看>>