admin 管理员组文章数量: 1184232
Redis 命令拼写错误:
接 集群(八)的笔记, 测试出现的问题
客户端 登录出现下列这个错误:
terminate called after throwing an instance of 'nlohmann::json_abi_v3_12_0::detail::parse_error'
what(): [json.exception.parse_error.101] parse error at line 1, column 1: attempting to parse an empty input; check that your input string or stream contains the expected JSON
-
程序用
nlohmann::json(这个 JSON 库)去 解析一个 JSON 字符串 。 -
但是传进去的字符串是
空的
(根本没东西,连
{}都没有)。 -
所以它抛出了
parse_error异常。
这个错误 有两种情况:
要么 就是 json本身传输有问题—客户端和服务端
要么 就是 redis 提前结束了
很可能是:
在
_redis.subscribe(id);
的时候,Redis库里出现了问题
!
订阅之后 ,Redis客户端(比如 redis-plus-plus) 会新起一个线程监听订阅消息 。
但是你的 Redis 客户端用法可能不对, 导致订阅线程把程序搞崩了 。
于是服务器自己断开了 TCP 连接,客户端收到空包,再去
json::parse,就炸了。----- 这是客户端收到那个错误的 主要原因!!!
总结一句话:问题不是你后面的登录逻辑写错了,是
_redis.subscribe(id)
之后 Redis那边出锅了。
解决办法:
经过测试, 确实是 订阅出问题了
把 redis 命令 拼写错了----->
导致
没有订阅成功
, 在
oberver_channel_message() 独立线程
发送得到了 错误, reply 接收的 是这个错误, reply 在if 那里 使得 整个程序退出了, 应该是 访问了非法内存
根本原因是
reply
的结构不符合预期
,导致访问了非法内存
线程中出现段错误 会导致整个 进程 终止,因为所有线程共享同一地址空间,段错误触发的 SIGSEGV 信号会影响整个进程。
版权声明:本文标题:碰到的 一个 恶心的错误_check that your input string or stream contains th 内容由网友自发贡献,该文观点仅代表作者本人, 转载请联系作者并注明出处:http://www.roclinux.cn/b/1770462653a3534010.html, 本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌抄袭侵权/违法违规的内容,一经查实,本站将立刻删除。
发表评论