问题标签 [libchan]

For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.

0 投票
1 回答
132 浏览

go - Spdy 流接收器正在接收 nil 对象

我正在使用libchandocker 库。他们的例子是这样的:

这是服务器:

当我运行服务器并与客户端发送消息时:

我在服务器日志中看到了这个输出:

我的服务器接收到带有echo命令的消息并成功执行。但是,它也会收到一个空命令,然后抛出一个 EOF:

为什么命令是空字符串?

我的怀疑是客户端退出然后发送exit信号。但如果是这样的话,为什么命令会是空白的呢?请帮助我了解发生了什么。

0 投票
1 回答
170 浏览

go - 尝试使用 go 接口实现多态性

我正在尝试在第三方库之上创建一个层,在本例中为 libchan。这是我定义的接口:

InboundTransport意味着作为 type 的替代品Transport

只是为了上下文,这是libchan.Receiver定义(请注意它与我的匹配ReceiverStream

Transportlibchan 库在此处返回:

由于libchan.TransportInboundTransport分享了一种WaitReceiveChannel() (ReceiverStream, error)方法,我想我应该能够将一个方法分给另一个方法,如下所示:

但我收到一个错误:

我假设这个错误的意思是类型ReceiverStream不匹配libchan.Receiver,但我认为golang接口是隐式的,这意味着只要返回类型实现与预期接口相同的方法,它就会通过编译。有什么我可以改变的,以便我可以将自定义接口叠加到第三方库返回的接口上吗?

TLDR:第三方库正在返回 interface 的对象TransportTransport接口指定了一个方法WaitReceiveChannel()。我有一个自定义接口InboundTransport,它还指定WaitReceiveChannel(). 我调用的第三方方法返回一个Transport通过 method实现的对象WaitReceiveChannel()。我假设它也会实现InboundTransport,因为后者也指定了WaitReceiveChannel()相同类型的 a。这是行不通的。为什么不?

0 投票
1 回答
150 浏览

go - 需要帮助了解 libchan 的工作原理

我正在尝试使用libchan库在使用类似 go 通道的传输的机器之间发送消息。

根据我收集到的信息,粗略的想法是这样的:

  1. 你有一个 SPDY 客户端,它通过 tcp 向一个地址发送一个序列化的命令对象。此命令对象包含一个名为 a 的 libchan 通道Pipe,通过该通道发送响应。
  2. 当服务器接收到一个传入连接时,它会等待一个命令对象。Pipe当它得到一个时,它会通过包含在对象中的内容发送响应。

这是我的困惑点。要让通道在两台机器之间持续存在,它们必须共享内存或至少共享连接它们两者的抽象。根据我对 libchan 代码库的了解,我不知道这怎么可能。

这是 repo 中示例的片段:

和服务器:

我要磨练的重点在这里:

根据消息来源,这将返回一个通道。一个引用保存在客户端,另一个发送到服务器。然后使用此通道将值从后者传递到前者。这在实践中如何运作?

客户端服务器的完整代码