问题描述
我找不到可以在 libp2p 中与对等点直接连接刷新写入的 API(它在 pubsub 中工作正常)。我在 Go 中使用 libp2p-go
和 host.NewStream
创建了一个直接的 libp2p 连接。该流由下面的包装器使用。问题是当我写入这个流时,另一端的对等方没有收到消息。底层的 network.Stream
似乎在 libp2p 的网络中进行了内部缓冲。但是我找不到在 network.Stream
或 go-libp2p-core
中的任何其他 libp2p 子包中的任何位置刷新写入的方法。其实我在任何地方都找不到。将我的包装器更改为使用 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
}
解决方法
暂无找到可以解决该程序问题的有效方法,小编努力寻找整理中!
如果你已经找到好的解决方法,欢迎将解决方案带上本链接一起发送给小编。
小编邮箱:dio#foxmail.com (将#修改为@)