gpt4 book ai didi

sockets - Golang tcp socket read 最终给出 EOF

转载 作者:IT王子 更新时间:2023-10-29 01:43:07 29 4
gpt4 key购买 nike

我在从套接字读取时遇到问题。有一个 Asterisk 实例正在运行,有大量调用(一分钟内 10-60 个),我正在尝试读取和处理与这些调用相关的 CDR 事件(连接到 AMI)。

这是我正在使用的库(不是我的,但由于错误而被迫 fork )https://github.com/warik/gami

它非常简单,主要操作在 gami.go - readDispatcher 中。

buf := make([]byte, _READ_BUF)    // read buffer
for {
rc, err := (*a.conn).Read(buf)

因此,有 TCPConn (a.conn) 和大小为 1024 的缓冲区,我正在从套接字中读取消息。到目前为止一切顺利,但最终,有时(这个时间可能从 10 分钟到 5 小时不等,与通过套接字的数据量无关)读取操作失败并出现 io.EOF 错误。我试图立即重新连接并重新登录,但这也是不可能的 - 连接超时,所以我被迫等待大约 40-60 秒,这段时间对我来说非常关键,因为延迟我丢失了很多数据.我在谷歌上搜索,阅读资料并尝试了很多东西——什么都没有。最奇怪的是,在 python 或 php 中打开的简单套接字不会失败。

  • 这个问题是否可能是因为在我的机器或 asterisk 服务器上缺少表示套接字的文件描述符?
  • 是否可能是 Asterisk 配置中的问题(因为我有另一个 Asterisk ,这个问题没有重现,而且,我在最后一个 Asterisk 上的调用时间更少)?
  • 在我处理套接字连接或 Go 的一般方式中是否可能存在这个问题?

go版本go1.2.1 linux/amd64

Asterisk 1.8

最佳答案

更新到最新的 Asterisk 。 AMI 发送大量数据时出现这样的错误。

对于检查问题,您已通过 ami 命令发送,如“COMMAND sip show peers”(或任何其他长输出命令)并查看结果。

关于sockets - Golang tcp socket read 最终给出 EOF,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/25850933/

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