【问题标题】:bidirectional communication with Thrift or Protocol Buffers与 Thrift 或协议缓冲区的双向通信
【发布时间】:2011-07-14 16:06:13
【问题描述】:

(对不起我的英语)

是否可以构建一个应用程序(实际上是 2 个)来实现进程之间的双向通信?

我知道两个“框架”来通信不同的进程(用不同的语言)Thrift 和 Protocol 缓冲区。

我知道 thrift 在客户端/服务器模式下工作,所以如果我想要双向通信,我需要像客户端和服务器一样构建两端/进程。

客户端/服务器 客户端/服务器

我不知道这种做法是否正确。

但是.. 我无法使用协议缓冲区找到有关此的信息。这可能吗?

我有一个 C++ 进程和一个 Node.js (Javascript) 应用程序.. C++ 进程向 de Node.js 应用程序发送通知(这很好用,我使用 thrift 进行测试)..

另一方面,用户与 Node.js 应用程序交互.. 在某些情况下,node.js 应用程序需要通知 de C++ 进程.. 所以我需要双向通信..

有什么想法吗?

提前致谢

【问题讨论】:

  • 在面向传输的网络的最底层,你总是有一个客户端和一个服务器,因为服务器是listen()s和​​accept()s的,而客户端是一个连接(),但之后通信中没有进一步的不对称性。如果两个进程都位于同一台机器上,则可以使用管道。
  • 很明显,在低层我们总是有一个客户端/服务器..但在高层实现中,我们的想法是只查看或使用一个通道......我试图完成这个..
  • 好吧,一旦你建立了连接,图片就相当对称了。双方可以平等地发送和接收。
  • @Kerrek SB:严格来说并非如此。两个程序可以同时调用bind,然后每个程序基本上同时调用connect。这导致创建 TCP 连接的同时 SYN 交换方法。
  • @Omnifarious:非常有趣。为什么不将其发布为答案?这是一种可行的方法吗?

标签: c++ node.js protocols thrift buffer


【解决方案1】:

这篇文章有一些 Thrift 选项 - Callbacks in Thrift Asynchronous Functions?

msdark 的问题实际上是关于双向事件信号,而不仅仅是双向数据传输。数据可以使用 Thrift 或 ProtoBufs 双向传输。从根本上说,任何 IPC 都必须双向传输数据——RPC 调用和返回值。异步客户端到服务器事件信号是使用RPC内置的,但是异步服务器到客户端需要更多的工作。在那个领域有工作。 The top two results in a Google search for 'thrift async' 很好读。

Thrift: Bidirectional Async RPC

等等……

【讨论】: