我目前正致力于为ubuntu服务器在C ++中创建可伸缩的服务器设计。是否可以通过LAN管道实现?快速LAN间通信的最佳选择是什么?
感兴趣的人的背景资料: 我和朋友一起做多人游戏。它将基于TCP。问题是Linux使服务器成为多客户端似乎意味着为每个客户端创建一个新进程或通过连接客户端的fdset选择()。我希望将这些方法结合起来并建立一个“管理器”流程,该流程将通过100个客户端进行选择,并将链中的任何更改报告给“taskmaster”流程,然后将该更改分发给其他管理器流程。如果管理器和任务主管在同一个盒子上,这将适用于管道,但如果我想稍后扩展它,我需要一个快速的Lan间通信方法。
答案 0 :(得分:2)
查看netcat应用程序。在一台机器上,您可以将netcat作为服务器运行,将输出传递给您的进程:
nc -l -p 1234 | myApp
这将侦听TCP端口1234,并通过stdout打印它收到的所有内容。
在另一台机器上:
myApp | nc 192.168.1.2 1234
其中192.168.1.2是第一台机器的IP地址。您需要查找nc
手册页以获取具体细节 - 以上内容全部来自内存。
答案 1 :(得分:1)
流套接字(SOCK_STREAM,如果严格本地则与AF_UNIX结合使用,如果超过tcp / ip则与AF_INET结合)是双向管道的网络等价物,并且所有数据都已订购。
答案 2 :(得分:1)
就像你提出这个问题的方式一样,你似乎认为,对于相关流程之间的沟通,管道是必要的答案。
考虑它的方法是,您需要在两个进程之间进行通信,无论它们是系统中的几个组件,客户端服务器对还是其他任何组件。然后,您选择适用于给定地理位置的机制。如果进程是本地的,则管道可以工作。您还可以将共享内存队列用于无复制通道。您还可以通过环回接口使用IP(通过套接字)。要跨网络(WAN或LAN),您几乎必须使用IP。
最后,除了TCP之外,还要考虑使用UDP,因为您可以获得内置的消息边界和更轻松的端点管理。
答案 3 :(得分:0)
LAN通常是基于以太网的网络。这意味着网络上运行的任何协议都必须基于以太网。 TCP / IP可以并且确实在以太网上运行,但管道和本地套接字仅设计为单个主机上的进程间通信,因此完全不适合多主机应用程序。
如果各种组件在不同的主机上运行,则需要通过某些基于TCP / IP的协议链接它们。有些传统协议如IPX和UUCP通过以太网运行,但这些协议已被TCP / IP完全取代。