我有以下几点:
//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秒重新建立一次连接?
Go有同步和沟通的渠道,请使用它们!
使您的连接处于循环状态,并让它等待某种消息返回通道。
...
errCh := make(chan error)
for {
lsconn, err = net.Dial("tcp", logStashHost)
// check error!
go ReadLogStash(lsconn, errCh)
err = <-errCh
if err != nil {
// bad error
break
}
// sleep to backoff on retries?
}
...
func ReadLogStash(conn net.Conn, errCh chan error) {
_, err := io.Copy(os.Stderr, conn)
if err != nil {
fmt.Println(err)
}
// a nil error from io.Copy means you reached EOF.
errCh <- err
}
除非您在ReadLogStash中具有更多功能,否则您可能只能使用io.Copy内联,而忘了整个功能,但是无论如何,此模式可能对您很有用。
问题内容: 这是我的代码: 输出量 为什么和具有相同的地址?在TCP中,我认为为新连接创建了一个新套接字。 问题答案: 这让我困惑了一秒钟,但这是正确的。确实创建了一个新的套接字(具有唯一的本地+远程地址元组)。维基百科的这段引文很好地描述了它: 服务器可以使用相同的本地端口号和本地IP地址创建多个同时建立的TCP套接字,每个套接字都映射到其自己的服务器子进程,并为自己的客户端进程提供服务。由于远
问题内容: 在Go中,TCP连接(net.Conn)是io.ReadWriteCloser。我想通过模拟TCP连接来测试我的网络代码。我有两个要求: 要读取的数据存储在字符串中 每当写入数据时,我都希望将其存储在某种缓冲区中,以便以后使用 是否有数据结构或简单的方法? 问题答案: 为什么不使用?它是一种并且具有获取存储数据的方法。如果需要将其设置为,则可以定义自己的类型: 并定义一个方法:
我在服务器上有一个专用于套接字的Node/Express应用程序,在客户端上它是Angular 1.5。使用相同的架构(例如单独的套接字服务器)在http上本地运行代码,一切都运行得非常好。 当我在本地运行代码时,它创建了一个连接,并通过xhr进行了很少的轮询。在采用https的cloudflare上,它会进行大量轮询,不断重新连接,并且似乎不是所有消息都会到达web客户端 消息到达cloudfl
重新建立mqtt连接,前提是必须已经通过Iot_id,Iot_pwd建立过一次mqtt连接。 请求方式: "|4|1|5|\r" 返回值: "|4|1|1|1|\r" mqtt连接状态:连接成功 "|4|1|1|2|reason|\r" mqtt连接状态:连接失败,字符串reason表示失败的原因 Arduino样例: softSerial.print("|4|1|5|\r");
重新连接上一次连接的wifi。 请求方式: "|2|3|\r" 返回值: "|2|1|\r" wifi连接状态:wifi断开连接 "|2|2|\r" wifi连接状态:正在连接wifi "|2|3|ip|\r" wifi连接状态:wifi连接成功,返回OBLOQ的ip地址 "|2|4|\r" wifi连接状态:wifi连接失败,检查SSID和PWD是否输入正确 Arduino样例: softSer
我有div,可以拖放到绘图区域。可以使用鼠标从源endpoint拖放到目标endpoint手动连接这些div。在这样创建的连接上,连接被分离,但endpoint保留,删除的连接可以通过上述相同的手动过程重新创建。现在,我还将以json格式的连接节点流程图形式的绘图保存到磁盘文件中。在加载文件时,流程图会完美地显示所有连接和节点。现在我在点击一个节点时删除一个连接,它就可以工作了。但是现在我不能再次