Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/cplusplus/144.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
LINUX:是否可以通过LAN进行管道传输?若然,是否可取?还有什么其他选择? 我目前正在为C++ Ubuntu服务器创建一个可扩展的服务器设计。跨局域网的管道传输是否可行?快速局域网间通信的最佳选择是什么_C++_C_Linux_Ipc_Pipe - Fatal编程技术网

LINUX:是否可以通过LAN进行管道传输?若然,是否可取?还有什么其他选择? 我目前正在为C++ Ubuntu服务器创建一个可扩展的服务器设计。跨局域网的管道传输是否可行?快速局域网间通信的最佳选择是什么

LINUX:是否可以通过LAN进行管道传输?若然,是否可取?还有什么其他选择? 我目前正在为C++ Ubuntu服务器创建一个可扩展的服务器设计。跨局域网的管道传输是否可行?快速局域网间通信的最佳选择是什么,c++,c,linux,ipc,pipe,C++,C,Linux,Ipc,Pipe,有兴趣人士的背景资料: 我正在和一个朋友做一个多人游戏。它将是基于TCP的。对于linux来说,使服务器成为多客户机似乎意味着为每个客户机创建一个新进程,或者通过一组连接的客户机来选择。我希望结合这些方法,建立一个“经理”流程,该流程将通过100个客户机进行选择,并向“任务主管”流程报告链上的任何更改,然后将更改分发给其他经理流程。如果管理者和监工在同一个盒子上,这对管道很好,但是如果我以后想扩展它,我需要一种快速的局域网间通信方法。流套接字(SOCK\u stream,如果是严格本地的,则与A

有兴趣人士的背景资料:
我正在和一个朋友做一个多人游戏。它将是基于TCP的。对于linux来说,使服务器成为多客户机似乎意味着为每个客户机创建一个新进程,或者通过一组连接的客户机来选择。我希望结合这些方法,建立一个“经理”流程,该流程将通过100个客户机进行选择,并向“任务主管”流程报告链上的任何更改,然后将更改分发给其他经理流程。如果管理者和监工在同一个盒子上,这对管道很好,但是如果我以后想扩展它,我需要一种快速的局域网间通信方法。

流套接字(SOCK\u stream,如果是严格本地的,则与AF\u UNIX相结合;如果是通过tcp/ip的,则与AF\u INET相结合)是双向管道的网络等价物,所有数据有序。

局域网通常是基于以太网的网络。这意味着网络上运行的任何协议都必须基于以太网。TCP/IP可以并且确实在以太网网络上运行,但管道和本地套接字仅设计为单个主机上的进程间通信,因此完全不适合多主机应用


如果不同的组件在不同的主机上运行,则需要通过一些基于TCP/IP的协议将它们链接起来。有些传统协议,如IPX和UUCP,在以太网上运行,但它们已被TCP/IP完全取代。

检查netcat应用程序。在一台计算机上,您可以将netcat作为服务器运行,将输出通过管道传输到您的进程:

nc -l -p 1234 | myApp
这将侦听TCP端口1234,并通过标准输出打印接收到的所有内容

在第二台机器上:

myApp | nc 192.168.1.2 1234

其中192.168.1.2是第一台机器的IP地址。您需要查看
nc
手册页以了解具体细节-以上内容都来自内存。

就您提出该问题的方式而言,您似乎认为,对于相关流程之间的通信,管道是必要的答案

考虑到这一点,您需要在两个进程之间进行通信,无论它们是系统中的两个组件、客户机-服务器对还是其他什么。然后选择一种适用于给定地理位置的机制。如果过程是本地的,管道就可以工作。您还可以将共享内存队列用于无复制通道。您还可以通过环回接口使用IP(通过套接字)。要通过网络(WAN或LAN),您几乎必须使用IP


最后,除了TCP之外,还考虑使用UDP,因为您得到了内置消息边界和更容易的端点管理。你需要使用插座。而且您不一定需要一个新的流程来成为多客户机。如果每个客户都产生了一个新的流程,那么您将无法很好地扩展。@Falmari:当然,这就是为什么我考虑一个新流程来处理多达100个客户。好的,谢谢。这完全是本地的。我在reddit上得到的一些建议是实现某种类型的多播系统并完全删除taskmaster。