【发布时间】:2012-04-26 11:07:16
【问题描述】:
我正在编写一个工具来转储 redis 的 rdb 数据文件。我发送一个“同步”命令保存为从属。然后将 rdb 解析为键、值。 但是,当直接从网络读取时,我无法解析 rdb。当我将网络数据写入文件并解析文件时,它运行良好。我不知道为什么。代码解析网络,文件完全相同。 解析网络和解析文件有区别吗?
谢谢!
----------------更新------------------
问题解决:
这是我的错,我不熟悉网络编程。我以错误的方式使用了读取系统调用。
例如:
我想从网络中读取 SIZE 个字节,我写道:nread = read(fd,buf,SIZE)
我假设 nread 等于 SIZE 。这适用于大多数时间读取文件,但在大多数时间读取网络流时不起作用。
所以我在 redis replication.c 中使用了 syncRead。
谢谢大家帮我解决问题!
【问题讨论】:
-
在这两种情况下都是一个 IO 流。应该没什么区别。我会修改你的网络代码。
-
您不能在网络流中搜索。
-
显而易见的问题是你如何解析?
-
@Jon:确实如此,但是在从流中读取 .rdb 时您不应该寻找。这是相当连续的。
-
@SergioTulentsev:不知道 .rdb,所以我相信它可以按顺序解析。但这并不意味着没有人编写代码来解析它“错误”。
标签: c networking network-programming redis protocols