我想用RabbitMQ创建一个小型多人游戏。单个服务器可以同时拥有多个会话。我的问题是我如何区分消息队列。我有两种基本的消息类型:异步更新(发送给会话中的每个人)和同步(玩家与游戏的互动。玩家转向做某事等)。
对于异步,我使用发布 - 订阅模式。服务器是发布者,会话中的所有玩家都是订阅者。为此,我使用扇出。
对于同步我使用RPC模式,每个客户端为每个功能有2个队列,1个用于发送,1个用于接收。
我的问题是如何以一种游戏会话不会相互干扰的方式设置MQ-s。我的想法是这个分层系统:1层是服务器(服务器列表),2层是房间列表,3层是房间。什么是建立这种事情的好方法。
我目前使用https://www.rabbitmq.com/getstarted.html设置我的服务器。它正在运行,但现在我想将它扩展到多个同步会话。
def initChannels(self):
self.updateConnection = pika.BlockingConnection(pika.ConnectionParameters(host='localhost'))
self.updateChannel = self.updateConnection.channel()
self.updateChannel.exchange_declare(exchange='updates',type='fanout')
self.place = threading.Thread(target=self.placeListener,args=(self.place,))
self.bomb = threading.Thread(target=self.bombListener, args=(self.bomb,))
self.place.start()
self.bomb.start()
def placeListener(self, place):
self.placeConnection = pika.BlockingConnection(pika.ConnectionParameters(host='localhost'))
self.placeChannel = self.placeConnection.channel()
self.placeChannel.queue_declare(queue='rpc_place')
self.placeChannel.basic_qos(prefetch_count=1)
self.placeChannel.basic_consume(place, queue='rpc_place')
self.placeChannel.start_consuming()
这是我如何设置MQ-s的示例。它主要与图案链接相似。