go - 您如何在与 libp2p-go 的直接 p2p 连接中手动刷新写入?
问题描述
我找不到与 libp2p 中的对等点直接连接来刷新写入的 API(它在 pubsub 中运行良好)。libp2p-go
我在 Go 中使用using创建了一个直接的 libp2p 连接host.NewStream
。该流由下面的包装器使用。问题是当我写入这个流时,另一端的对等端没有收到消息。底层network.Stream
似乎在 libp2p 的网络中进行了内部缓冲。但是我找不到一种方法来network.Stream
刷新go-libp2p-core
. 其实我到处都找不到。更改我的包装器以使用bufio
读取器和写入器没有效果,因为它不会刷新 libp2p 的内部缓冲。我知道消息已发送,因为当我关闭流时,远程对等方会收到它们。
// NetReaderWriter is a wrapper for a libp2p network stream to an individual peer.
type NetReaderWriter struct {
stream network.Stream
}
// NewNetReaderWriter creates a new ReadWriteCloser based on a ReadCloser and a WriteCloser.
func NewNetReaderWriter(stream network.Stream) *NetReaderWriter {
return &NetReaderWriter{
stream: stream,
}
}
// Read like in io.Reader
func (rwc *NetReaderWriter) Read(p []byte) (int, error) {
return rwc.stream.Read(p)
}
// Write like in io.Writer
func (rwc *NetReaderWriter) Write(p []byte) (int, error) {
k, err := rwc.stream.Write(p)
// <== flush here, but how???
return k, err
}
// Close like in io.Closer - this closes both the reader and writer.
func (rwc *NetReaderWriter) Close() error {
err := rwc.stream.Close()
if err != nil {
return fmt.Errorf("unable to close network stream: %v", err)
}
return nil
}
解决方案
推荐阅读
- c - C语言计算程序
- javascript - JavaScript 中的自动装箱是暂时的还是永久的?
- java - 类型不匹配:无法将字符串解析为 int
- tensorflow - AttributeError:模块“tensorflow._api.v1.config”没有属性“set_visible_devices”
- javascript - 想要捕获在 WebViewer 中加载带/不带注释的文档的开始和结束时间
- php - html 表单成功完成了它的工作,但是有一条错误消息说有问题
- svelte - Svelte 中的单身人士
- firebase - 使用 Firebase 托管时,视频 (.mp4) 无法在 Safari 中加载
- postgresql - 对 postgreSQL v12 触发器的 COPY 支持
- swift - Swift Inject Javascript 将 HTML 元素删除到 WebView