【问题标题】:How to get the IP of who is sending a message?如何获取发送消息的IP?
【发布时间】:2014-09-02 00:39:32
【问题描述】:

我正在尝试创建一个游戏,所以想象一下,如果我有 2 个客户:玩家 A 和玩家 B。

两者都已经向服务器发送了一条消息以识别自己。所以两者都已登录。

现在玩家 A 想要攻击玩家 B。我怎样才能保留玩家的 IP 或其他内容,以便服务器能够向玩家 B 发送消息,让他知道自己受到了攻击?

我正在使用rabbitmq。

【问题讨论】:

标签: .net rabbitmq


【解决方案1】:

我过去处理此问题的方式是让客户(在您的情况下为玩家)拥有自己的队列。或者,如果您想通知所有玩家,您可以设置主题交换。

他是我现在的设置。

直接交换: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

【讨论】:

  • 嗯...我认为我的问题没有得到回答
  • @Seva 我不确定您要什么...您希望您的服务器能够将消息定向到特定玩家并且直接交换回应该实现这一点。我会在 IP 地址上使用唯一 ID,因为可能有多个玩家来自同一个 IP。如果您正在寻找某种方法来跟踪服务器端的谁是谁,那么请保留一份哪些玩家属于哪些队列的列表。您可以让新玩家通过 RabbitMQ 发送某种注册消息,或者在玩家发布消息时使用“reply_to”属性。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2014-08-02
  • 1970-01-01
  • 2021-05-05
  • 2021-03-29
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多