首页 > 试题广场 >

在一个基于分布式的游戏服务器系统中,不同的服务器之间,哪种通

[单选题]
在一个基于分布式的游戏服务器系统中,不同的服务器之间,哪种通信方式是不可行的()?
  • 管道
  • 消息队列
  • 高速缓存数据库
  • 套接字
对于管道,有下面这几种类型:
①普通管道(PIPE):通常有两种限制,一是单工,即只能单向传输;二是血缘,即常用于父子进程间(或有血缘关系的进程间)。

②流管道(s_pipe):去除了上述的第一种限制,实现了双向传输。

③命名管道(name_pipe):去除了上述的第二种限制,实现了无血缘关系的不同进程间通信。
显然,要求是对于不同的服务器之间的通信,是要要求全双工形式的,而管道只能是半双工,虽然可以双向,但是同一时间只能有一个方向传输,全双工和半双工的区别可以如下图示理解:
发表于 2018-03-22 21:05:18 回复(20)
So Easy....

管道( pipe ):管道是一种半双工的通信方式,数据只能单向流动,而且只能在具有亲缘关系的进程间使用。进程的亲缘关系通常是指父子进程关系。
既然是不同的服务器之间进行通信,怎么可能会是具有亲缘关系的进程呢?
发表于 2017-09-06 16:34:59 回复(5)
什么是消息队列? 我们可以把消息队列比作是一个存放消息的容器,当我们需要使用消息的时候可以取出消息供自己使用。消息队列是分布式系统中重要的组件,使用消息队列主要是为了通过异步处理提高系统性能和削峰、降低系统耦合性。 摘自 https://www.jianshu.com/p/36a7775b04ec 举例: 小红是小明的姐姐。 小红希望小明多读书,常寻找好书给小明看,之前的方式是这样:小红问小明什么时候有空,把书给小明送去,并亲眼监督小明读完书才走。久而久之,两人都觉得麻烦。 后来的方式改成了:小红对小明说「我放到书架上的书你都要看」,然后小红每次发现不错的书都放到书架上,小明则看到书架上有书就拿下来看。 书架就是一个消息队列,小红是生产者,小明是消费者。 这带来的好处有: 1.小红想给小明书的时候,不必问小明什么时候有空,亲手把书交给他了,小红只把书放到书架上就行了。这样小红小明的时间都更自由。 2.小红相信小明的读书自觉和读书能力,不必亲眼观察小明的读书过程,小红只要做一个放书的动作,很节省时间。 3.当明天有另一个爱读书的小伙伴小强加入,小红仍旧只需要把书放到书架上,小明和小强从书架上取书即可(唔,姑且设定成多个人取一本书可以每人取走一本吧,可能是拷贝电子书或复印,暂不考虑版权问题)。 4.书架上的书放在那里,小明阅读速度快就早点看完,阅读速度慢就晚点看完,没关系,比起小红把书递给小明并监督小明读完的方式,小明的压力会小一些。 这就是消息队列的四大好处: 1.解耦 每个成员不必受其他成员影响,可以更独立自主,只通过一个简单的容器来联系。 小红甚至可以不知道从书架上取书的是谁,小明也可以不知道往书架上放书的人是谁,在他们眼里,都只有书架,没有对方。 毫无疑问,与一个简单的容器打交道,比与复杂的人打交道容易一万倍,小红小明可以自由自在地追求各自的人生。 2.提速 小红选择相信「把书放到书架上,别的我不问」,为自己节省了大量时间。 小红很忙,只能抽出五分钟时间,但这时间足够把书放到书架上了。 3.广播 小红只需要劳动一次,就可以让多个小伙伴有书可读,这大大地节省了她的时间,也让新的小伙伴的加入成本很低。 4.削峰 假设小明读书很慢,如果采用小红每给一本书都监督小明读完的方式,小明有压力,小红也不耐烦。 反正小红给书的频率也不稳定,如果今明两天连给了五本,之后隔三个月才又给一本,那小明只要在三个月内从书架上陆续取走五本书读完就行了,压力就不那么大了。 摘自 https://www.zhihu.com/question/34243607
发表于 2020-09-29 11:04:56 回复(19)
管道通信类似于通信中半双工信道的进程通信机制,一个管道可以实现双向的数据传输,而同一个时刻只能最多有一个方向的传输,不能两个方向同时进行
发表于 2017-08-19 18:59:49 回复(0)
1.管道(pipe)
    管道是一种具有两个端点的通信通道,一个管道实际上就是只存在在内存中的文件,对这个文件操作需要两个已经打开文件进行,他们代表管道的两端,也叫两个句槟,管道是一种特殊的文件,不属于一种文件系统,而是一种独立的文件系统,有自己的数据结构,根据管道的使用范围划分为无名管道和命名管道。
无名管道用于父进程和子进程之间,通常父进程创建管道,然后由通信的子进程继承父进程的读端点句柄和写端点句柄,或者父进程有读写句柄的子进程,这些子进程可以使用管道直接通信,不需要通过父进程。
命名管道,命名管道是为了解决无名管道只能在父子进程间通信而设计的,命名管道是建立在实际的磁盘介质或文件系统(而不是只存在内存中),任何进程可以通过文件名或路径建立与该文件的联系,命名换到需要一种FIFO文件(有先进先出的原则),虽然FIFO文件的inode节点在磁盘上,但仅是一个节点而已,文件的数据还是存在于内存缓冲页面中,和普通管道相同。
2.信号
    信号,用于接受某种事件发生,除了用于进程间通信之外,进程还可以发送信号给进程本身。除了系统内核和root之外,只有具备相同id的进程才可以信号进行通信。
3.消息队列
    消息队列是消息的链表,包括Posix消息队列和system v消息队列(Posix常用于线程,system常用于进程),有权限的进程可以向消息队列中添加消息,有读权限的进程可以读走消息队列的消息。
消息队列克服了信号承载信息量少,管道只能承载无格式字节流及缓冲区大小受限等缺陷。
4.共享内存
    共享内存使多个进程可以访问同一块内存空间,是最快的IPC形式,是针对其他通信方式运行效率低而设计的,往往与其他进程结合使用,如与信号量结合,来达到进程间的同步与互斥。传递文件最好用共享内存的方式。 

发表于 2019-12-28 11:30:43 回复(0)

瞎猜一波

发表于 2018-12-04 11:36:25 回复(1)
管道通信和通信中的半双工信道的进程通信机制相似,一个管道虽然可以实现双向的数据传输,但是同一时刻最多只能存在一个方向的传输,不能两个方向同时进行。
发表于 2017-08-19 19:48:43 回复(0)
套接字Socket对网络中不同主机上的应用进程之间进行双向通信的端点的抽象。一个套接字就是网络上进程通信的一端,提供了应用层进程利用网络协议交换数据的机制。从所处的地位来讲,套接字上联应用进程,下联网络协议栈,是应用程序通过网络协议进行通信的接口,是应用程序与网络协议根进行交互的接口
本题只有一是不能全双工的
发表于 2020-06-23 10:03:43 回复(0)
管道通信和通信中的半双工信道的进程通信机制相似,一个管道虽然可以实现双向的数据传输,但是同一时刻最多只能存在一个方向的传输,不能两个方向同时进行。管道通信和通信中的半双工信道的进程通信机制相似,一个管道虽然可以实现双向的数据传输,但是同一时刻最多只能存在一个方向的传输,不能两个方向同时进行。
发表于 2017-09-04 23:03:38 回复(0)
发表于 2020-02-18 20:36:15 回复(1)
管道是进程间通信,linux的命令,是同台机器 消息队列看成redis,kafka这类连接 缓存数据库 sqlite?,也可以其他机器访问 socket就是网络通信 分布式,简单理解可以水平扩展,通过加机器方式扩容
编辑于 2020-11-21 09:38:48 回复(0)
管道是一种半双工的通信方式,管道传输只能在有亲缘关系的进程中使用,亲缘关系指父子进程
发表于 2018-03-19 19:38:26 回复(0)
解题思路:排除BC,AD纠结一波,选了个D。
发表于 2020-12-01 13:09:19 回复(0)
管道_单通道通信
发表于 2020-11-17 17:58:15 回复(0)
管道:半双工通信,数据只能单向流动;是一种进程间通信方式,而且是在父子进程关系之间。
不同服务器之间的通信,那就不存在父子进程关系
发表于 2018-09-10 11:08:01 回复(0)
谁能给出一个完美的解释呢
发表于 2017-09-05 10:19:55 回复(2)
在分布式系统中,不同的服务器需要进行通信来共同完成任务。常见的通信方式有消息队列、高速缓存数据库和套接字等。其中,管道是一种进程间通信方式,只能在同一台机器上的不同进程间通信,不能跨越不同机器之间的通信,因此在分布式系统中不适用。
消息队列是一种常用的分布式通信方式,它通过在不同服务器之间传递消息来实现通信。高速缓存数据库也可以用于分布式系统中的通信和数据共享。套接字是一种网络通信方式,可以用于不同机器之间的通信。
发表于 2023-06-22 21:57:05 回复(0)
<p>管道只有在亲缘关系进程间可以使用</p>
发表于 2020-12-06 00:27:59 回复(1)
管道( pipe ):管道是一种半双工的通信方式,数据只能单向流动,而且只能在具有亲缘关系的进程间使用。进程的亲缘关系通常是指父子进程关系。
发表于 2019-08-12 10:28:12 回复(0)
A
发表于 2019-05-07 09:21:13 回复(0)