我找不到与 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
}