我在从套接字读取时遇到问题。有星号实例运行大量呼叫(一分钟 10-60 次),我正在尝试读取和处理与这些呼叫(连接到 AMI)相关的 CDR 事件。
这是我正在使用的库(不是我的,但由于错误而被推到 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中打开的那个简单的socket并没有失败。
由于缺少文件描述符来表示我的机器或星号服务器上的套接字,是否可能出现问题?
星号配置中是否有可能出现这个问题(因为我有另一个星号,这个问题不会重现,而且,我对最后一个的调用时间减少了)?
在我处理套接字连接或一般情况下,是否有可能出现这个问题?
转到版本 go1.2.1 linux/amd64
相关分类