LINUX:是否可以通过局域网进行pipe道传输? 如果是这样,这是可取的吗? 还有什么其他的select?

我目前正在使用C ++为ubuntu服务器创build一个可扩展的服务器devise。 是否可以通过局域网来实现? 快速LAN间通信的最佳select是什么?

那些感兴趣的背景信息:我正在和朋友做一个多人游戏。 这将是基于TCP的。 对于linux来说,让服务器成为多客户端似乎意味着要为每个客户端创build一个新进程,或者通过连接客户端的fdset来select()。 我想把这些方法结合起来,并有一个“pipe理者”过程,通过大概100个客户端来select,并将链上的任何变化报告给一个“任务pipe理者”过程,然后将这个变化分配给其他pipe理者过程。 如果pipe理员和任务pipe理员在同一个方框上,这将可以正常工作,但是如果我想在稍后调整它,我需要一个快速的局域网通信方法。

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

nc -l -p 1234 | myApp 

这将侦听TCP端口1234,并打印所有收到的标准输出。

而在第二台机器上:

 myApp | nc 192.168.1.2 1234 

其中192.168.1.2是第一台机器的IP地址。 你需要查看nc手册页的具体细节 – 以上都是从内存中。

一个流套接字(SOCK_STREAM,如果是严格的本地结合AF_UNIX或者如果over tcp / ip,则与AF_INET结合)是一个双向管道的网络对等体,所有数据都是有序的。

就你问这个问题的方式而言,你似乎有这样的看法:对于相关过程之间的沟通,管道是必要的答案。

思考这个问题的方式是需要两个进程之间的通信,不管它们是系统中的几个组件,客户端服务器对还是其他任何组件。 然后你选择一个适用于给定地理的机制。 如果进程是本地的,则管道工作。 您也可以将共享内存队列用于非复制通道。 您也可以在回环接口上使用IP(通过套接字)。 要通过网络(广域网或局域网),你几乎不得不使用IP。

最后,除TCP外,还应考虑使用UDP,因为您可以获得内置的消息边界和更简单的端点管理。

局域网通常是基于以太网的网络。 这意味着在您的网络上运行的任何协议都必须是基于以太网的。 TCP / IP可以在以太网上运行,但是管道和本地套接字只能在单个主机上进行进程间通信,所以完全不适用于多主机应用。

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