【发布时间】:2014-04-30 18:31:28
【问题描述】:
我有以下几点:
//In an init func
if logStashHost != "" {
lsconn, err = net.Dial("tcp", logStashHost)
}
...
ToLogStash(rec, lsconn)
然后是两个函数:
func ReadLogStash(conn net.Conn) {
buffer := make([]byte, 256)
for {
_, err := conn.Read(buffer)
if err != nil {
fmt.Println(err)
} else {
fmt.Println(buffer)
}
}
}
func ToLogStash(r *logrow.Record, conn net.Conn) {
b, err := json.Marshal(r)
if err != nil {
fmt.Println(err)
return
}
_, err = fmt.Fprintln(conn, string(b))
if err != nil {
fmt.Println(err)
}
}
ReadLogStash 是一个正在运行的 goroutine。如果对方关闭,我会得到 EOF。 ReadLogStash 中的一个好的实现是让它在收到 EOF 时每 X 秒尝试重新建立连接?
【问题讨论】:
-
ToLogStash 和 ReadLogStack 有什么关系?
-
@JimB 他们都通过了相同的连接。这个想法是发送不会因为 goroutine 而被读取阻塞。但也许这没有意义