【问题标题】:Local Communication - 127.0.0.1 vs. IPC本地通信 - 127.0.0.1 与 IPC
【发布时间】:2018-02-20 17:03:37
【问题描述】:

我不清楚使用 TCP 套接字与客户端连接到 127.0.0.1 服务器地址和其他 IPC(如消息队列)之间的区别。由于两者都用于同一主机内的通信,为什么有人会采用套接字方法将消息队列保留为一个,因为在这种情况下,与队列相比,套接字会导致更多开销。

我看到的差异:- 在sockets的情况下,我们可以在wireshark中看到内容,而在队列中则没有这种方式。

【问题讨论】:

  • user9071725 - 这个问题在 SO 上被认为是“过于宽泛”。请查看stackoverflow.com/help/how-to-ask
  • 尝试Wikipedia 比较各种方法。 TCP 通过网络堆栈,因此 Wireshark 可以对其进行监控。
  • 一个 TCP 在正常 IPC 功能上的使用示例将非常有帮助。您可以根据该示例提出问题,并询问您向我们展示的具体案例。
  • 使用 TCP 的一个优点是,将来您可能希望另一台机器上的另一个进程。 TCP - 这很容易做到。
  • '我想从 B 市的地址 A 到 D 市的地址 C。我应该开车、坐火车还是坐飞机?太宽泛了:(

标签: c linux sockets ipc


【解决方案1】:

环回接口/地址的重点不是你写程序专门使用它。

关键在于,它让您可以与运行在本地计算机上的网络服务进行通信,就像与运行在远程主机上的网络服务进行通信一样。例如,如果我正在开发一个网站,我可以在本地计算机上启动其服务器的测试实例,然后将浏览器指向http://127.0.0.1/,它就在那里。我不必修改浏览器的代码来通过 AF_UNIX 套接字或其他任何方式进行通信。类似地,如果我正在编写一个需要数据库的应用程序,我可能会从与应用程序在同一台计算机上运行的数据库开始,通过环回与它通信,但稍后当数据库变得更大时,我可以将它移动到专用的除了连接配置之外,我不需要更改任何内容。

本地 IPC 的开销较低是绝对正确的,并且应该在需要通信的两个进程始终在同一台机器上时使用。

【讨论】:

  • 感谢 Abhijit Pritam。我得到了它。解释得很好。
【解决方案2】:

TCP 和 IPC 都是我们在分布式架构中用于进程间通信的方法。如果进程在同一台机器上运行,我们将使用消息队列,但肯定不是 TCP。但是假设一个应用程序在一个盒子中运行,而另一个应用程序在另一个盒子中运行,那么我们必须使用 TCP 进行进程间通信。甚至 Web 服务也在内部实现 TCP 以与远程应用程序通信。

但我们仍然需要在同一台机器上的两个进程之间进行基于 TCP 的通信,其中必须进行同步通信。例如,如果您发送对客户帐户信息的请求并等待响应,您需要这种方法。但是,如果您只需要将客户端信息发送到服务器以将其存储在表中,并且无论您的记录是否已成功存储,您都不需要该服务器的回答,那么您只需进入队列即可删除消息.

【讨论】:

  • 127.0.0.1/8 是指本地机器的地址空间。问题是,在这种 自引用 案例中,为什么有人会更喜欢 TCP 而不是通常的内核提供的 IPC。
  • @Downvoter,我修改了我的答案。我们确实需要根据要求进行 TCP 通信。即使在我的服务器中,两个进程之间也存在 TCP 通信以进行同步通信,并且在同一台服务器中,我们使用 IBM 消息队列进行异步通信。感谢您的评论:-)
猜你喜欢
  • 2012-03-12
  • 1970-01-01
  • 1970-01-01
  • 2014-10-01
  • 2013-09-29
  • 1970-01-01
  • 2021-08-17
  • 2011-02-16
  • 1970-01-01
相关资源
最近更新 更多