gpt4 book ai didi

c - 解析网络和解析文件之间有什么区别吗?

转载 作者:IT王子 更新时间:2023-10-29 06:10:22 24 4
gpt4 key购买 nike

我正在编写一个工具来转储 redis 的 rdb 数据文件。我发送一个“同步”命令保存为奴隶。然后将 rdb 解析为键、值。但是,当直接从网络读取时,我无法解析 rdb。当我将网络数据写入文件并改为 pares 文件时,它工作得很好。我不知道为什么。代码解析网络和文件完全相同。解析网络和解析文件有区别吗?

谢谢!

----------------更新----------------
问题已解决:
是我的错,我不熟悉网络编程。我以错误的方式使用了读取系统调用。
例如:
我想从网络读取 SIZE 字节,我写道:
nread = read(fd,buf,SIZE)
我假设 nread 等于 SIZE 。这在大多数情况下适用于读取文件,但在大多数时间读取网络流时不起作用。所以我改用redis replication.c中的syncRead。
感谢大家帮我解决问题!

最佳答案

解析网络流和解析文件没有区别。具体来说,在解析redis转储文件的情况下,永远不需要向前或向后寻找。您事先知道必须读取的确切字节数,因此可以分配正确的内存量。

通过 sync 命令作为从站连接的一个问题 - Redis 服务器不会关闭连接。一旦 rdb 文件被传输,它就会开始通过常规的 redis 协议(protocol)发送增量命令。如果您无法检测到此转换,则会出现解析错误。

如果您仍然无法解析网络流,也许您应该提供一些代码,或者粘贴一些异常/堆栈跟踪。

话虽如此,我觉得最好还是把dump文件写到磁盘上,然后再解析。这就是 redis slaves 现在的运作方式。

旁白:

我是 redis-rdb-tools 的作者,这是一个基于 python 的 redis 转储文件解析器。我已经记录了 format of the dump file , 并且有一个 FAQ entry关于如何用不同的语言创建解析器。您可能会发现这些链接很有用。

关于c - 解析网络和解析文件之间有什么区别吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10332172/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com