【发布时间】:2014-09-02 00:39:32
【问题描述】:
我正在尝试创建一个游戏,所以想象一下,如果我有 2 个客户:玩家 A 和玩家 B。
两者都已经向服务器发送了一条消息以识别自己。所以两者都已登录。
现在玩家 A 想要攻击玩家 B。我怎样才能保留玩家的 IP 或其他内容,以便服务器能够向玩家 B 发送消息,让他知道自己受到了攻击?
我正在使用rabbitmq。
【问题讨论】:
我正在尝试创建一个游戏,所以想象一下,如果我有 2 个客户:玩家 A 和玩家 B。
两者都已经向服务器发送了一条消息以识别自己。所以两者都已登录。
现在玩家 A 想要攻击玩家 B。我怎样才能保留玩家的 IP 或其他内容,以便服务器能够向玩家 B 发送消息,让他知道自己受到了攻击?
我正在使用rabbitmq。
【问题讨论】:
我过去处理此问题的方式是让客户(在您的情况下为玩家)拥有自己的队列。或者,如果您想通知所有玩家,您可以设置主题交换。
他是我现在的设置。
直接交换:App.Server(客户端发布,服务器使用)
直接交换:App.Client.UniqueIDForClient1(服务器发布,只有客户端 1 使用)
直接交换:App.Client.UniqueIDForClient2(服务器发布,只有客户端 2 使用)
Topic Exchange:App(服务器发布,所有客户端订阅App.Client)
如果您使用的是 c#,这就是您设置和发布到主题交换的方式:
ConnectionFactory mqFactory = new ConnectionFactory();
mqFactory.HostName = "localhost";
IConnection mqConnection = mqFactory.CreateConnection();
IModel mqChannel = mqConnection.CreateModel();
mqChannel.ExchangeDeclare("App", "topic", true);
response = "This Message Will Go To All Topic Subscribers";
mqChannel.BasicPublish("App", "App.Client", null, Encoding.UTF8.GetBytes(response));
我目前没有方便的消费者/订阅者代码,因为我的客户端目前是使用 PHP/AJAX 的网络应用程序。
这里是官方 RabbitMQ 教程的链接,其中包含订阅方示例:https://www.rabbitmq.com/tutorials/tutorial-five-dotnet.html
【讨论】: