【问题标题】:using loopback for testing environment使用环回测试环境
【发布时间】:2013-03-27 05:32:20
【问题描述】:

我想在同一台物理机器上运行同一服务器的两个实例。这两台服务器将监听相同的端口,比如 12345。我正在尝试在 127.0.0.1 上运行一台服务器,而在 127.0.0.2 上运行另一台服务器。这两个服务器基本上将使用相同的端口发送和接收消息,但在不同的环回地址上运行。我不知道我是否在正确的路径上设置这个测试环境?不知何故,我无法设置这个测试环境。我正在使用java开发服务器。

【问题讨论】:

  • 我认为您无法将两台服务器绑定到同一个端口。你为什么要这么做?
  • 我需要这个机制来测试环境。否则每次想尝试都需要把程序上传到物理机上。这将非常耗时。有一种称为环回的机制。我不知道它是否允许对多个环回地址使用相同的端口。
  • @lmsteffan 不是这样,看我的回答。
  • @EJP 我已更正。

标签: java tcp ip loopback


【解决方案1】:

这正是我的 NanoHTTPD 的分支的用途:

https://github.com/gitgrimbo/nanohttpd/commit/9535d1b6b4c1bbc927d390327018882d84df959f

Added ability to specify hostname to bind to.

For example:

java NanoHTTPD -d wwwroot1 -h 127.0.0.1
java NanoHTTPD -d wwwroot2 -h 127.0.0.2
java NanoHTTPD -d wwwroot3 -h 127.0.0.3

And hosts file:

127.0.0.1   www1.example.com
127.0.0.2   www2.example.com
127.0.0.3   www3.example.com

特别是第 225 行(在上面的提交链接中):

myServerSocket.bind(new InetSocketAddress(hostname, port)); 

这段代码结合我上面的说明,展示了如何在多个环回地址上运行服务器,所有这些地址都使用相同的端口(默认为 80,但您可以选择任何一个)。

【讨论】:

  • 对不起,我没有检查你的程序。它是使用这种机制的一个例子吗?
  • 实际上并没有回答这个问题。 “是”或“否”会回答它,而不是指向整个项目的链接。
  • 我不同意。我的答案可能不像你的那么简单,但从长远来看,作为“现实世界”的例子,它肯定会更有用。
  • 我没看到。他已经在开发他的服务器了。他只需要知道这是可能的。
【解决方案2】:

如果指定两个不同的接口,则可以将两个服务器绑定到同一个端口:

ServerSocket s1 = new ServerSocket(port, 500, InetAddress.getByName("127.0.0.1"));
ServerSocket s2 = new ServerSocket(port, 500, InetAddress.getByName("127.0.0.2"));

【讨论】:

  • @downvoter 你需要一段时间来测试你有缺陷的假设,并对你不完整的知识状态做一些事情。我有一个可以做到这一点的生产环境。四个 Tomcat 在 127.0.0.{1,2,3,4} 上运行,都使用相同的端口。
  • 所以问题是这两个服务器可以在环回上使用相同的端口相互通信吗?这是我的主要问题。我实际上测试了它们,你是对的。我可以在环回上运行两台服务器,但它们不能使用相同的端口进行通信。从 127.0.0.1:12345 发送到 127.0.0.2:12345。这不起作用。
  • @celik 当然可以,如果他们使用正确的 IP:port 相互连接的话。我不明白最后一部分。 127.0.0.1 是一个listening 端口,表示一个监听套接字。你不能用它在任何地方发送任何东西。为什么要这样做?
  • 确保环回 IP 地址处于活动状态。对于 Mac osx,它们是被动的。如果您 p​​ing 127.0.0.2,您将看到超时。要激活它们,请运行 ifconfig lo0 alias 127.0.0.2
猜你喜欢
  • 2012-10-12
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2021-11-12
  • 2013-02-02
  • 2011-07-28
相关资源
最近更新 更多