如何使用libp2p go在直接p2p连接中手动刷新Write?

如何使用libp2p go在直接p2p连接中手动刷新Write?,go,libp2p,Go,Libp2p,我在libp2p中找不到一个API来刷新与对等机的直接连接(它在pubsub中运行良好)。我使用libp2p-Go使用host.NewStream在Go中创建一个直接的libp2p连接。流由下面的包装器使用。问题是,当我写入这个流时,另一端的对等方没有收到消息。底层的network.Stream似乎在libp2p的网络中进行了内部缓冲。但是我找不到一种方法来刷新network.Stream或go-libp2p-core中的任何其他libp2p子包中的任何写入。事实上我到处都找不到。将我的包装器更

我在libp2p中找不到一个API来刷新与对等机的直接连接(它在pubsub中运行良好)。我使用
libp2p-Go
使用
host.NewStream
在Go中创建一个直接的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
}
//NetReaderWriter是libp2p网络流到单个对等方的包装器。
类型NetReaderWriter结构{
流网络
}
//NewNetReaderWriter基于ReadCloser和WriteCloser创建新的ReadWriteCloser。
func NewNetReaderWriter(流网络.stream)*NetReaderWriter{
return&NetReaderWriter{
小溪:小溪,
}
}
//像io.Reader一样阅读
func(rwc*NetReaderWriter)读取(p[]字节)(int,错误){
返回rwc.stream.Read(p)
}
//像木卫一一样写作
func(rwc*NetReaderWriter)写入(p[]字节)(int,错误){
k、 错误:=rwc.stream.Write(p)
//