java 使用同一台机器用127.0.0.1测试服务端和客户端没有问题,如何设置ip让其它机器做客户端?
Posted
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了java 使用同一台机器用127.0.0.1测试服务端和客户端没有问题,如何设置ip让其它机器做客户端?相关的知识,希望对你有一定的参考价值。
127.0.0.1和localhost都是本机内部地址,如果要内网其他机器访问,则需要客户端访问你机器的内网ip(例如:192.168.1.74),查看你的内网ip可通过命令行输入ipconfig命令查看。如客户端是公网机器则比较复杂,你需要查看你当前的公网ip地址,假如是在家中没有固定ip,可通过访问ip138一类网站查看自身公网地址,然后还要设置你的路由器将你的监听端口映射到你的服务器机ip。
另外在调试时一定注意防火墙放开你的服务端监听端口。 参考技术A 查看你的外网IP地址和端口号,用它们设置就行了 参考技术B 如果是外网,就不好办了。
注意防火墙
当多个java程序在同一台机器上运行时
【中文标题】当多个java程序在同一台机器上运行时【英文标题】:When multiple java programs run on the same machine 【发布时间】:2013-08-26 00:24:24 【问题描述】:每个 Java 应用程序都将在特定的 Java 虚拟机实例中运行。我真的对以下方面感到困惑,而谷歌搜索让我更加困惑。不同网站上的不同文章。
如果我有一个用 java 编写的 web 服务,它将需要一个 JVM 实例来运行。那么 JVM 可以成为一个守护进程吗?
如果是,当我们运行任何其他 java 应用程序时,它会使用这个 JVM 实例还是创建一个新实例?
任何机器中可用的主内存都是不变的。当我们同时启动 n 个 java 进程而不提供任何初始堆大小时,堆大小如何在进程之间分布?
是否有进程管理n个JVM实例,还是由操作系统自己管理?
在 GC 期间发生 stop-the-world 时,其他 JVM 实例(我假设的不同线程)是否会受到影响?
【问题讨论】:
你的第一点取决于容器的实现... +1 以获得详细解释并在提问前研究问题。 【参考方案1】:1) 如果我有一个用 java 编写的 web 服务,它将需要一个 JVM 实例来运行。那么JVM可以做守护进程吗?
是的,它可以。如何完成取决于操作系统和 Web 服务器容器本身。
2) 如果是,当我们运行任何其他 java 应用程序时,它会使用这个 JVM 实例还是创建一个新实例?
没有。每个 Java 应用程序都使用一个独立的 JVM。
每个 JVM 都是一个单独的进程,这意味着没有共享堆栈、堆等。 (通常,唯一可以共享的东西是只读段,其中包含核心 JVM 和本机库的代码......就像普通进程可能共享代码段一样。)
3) 任何机器中可用的主内存都是恒定的。当我们同时启动 n 个 java 进程而不提供任何初始堆大小时,堆大小如何在进程之间分布?
如果您不指定大小,决定堆多大的机制取决于您使用的 JVM/平台/版本,以及您使用的是“客户端”还是“服务器”模型(对于 Hotspot JVM )。启发式不考虑其他 JVM 的数量或大小。
参考:https://***.com/a/4667635/139985
实际上,最好直接指定堆大小。
4) 是否有进程管理 n 个 JVM 实例或由操作系统自己管理?
两者都不是。 JVM实例的数量由可以启动进程的各种事物的动作决定;例如守护进程脚本、命令脚本、用户在命令行输入命令等。最终,如果操作系统资源耗尽,操作系统可能会拒绝启动更多进程,但 JVM 的处理方式与其他进程没有任何不同。
5) 当 GC 期间发生 stop-the-world 时,其他 JVM 实例(我假设的不同线程)是否受到影响?
没有。 JVM 是独立的进程。它们不共享任何可变状态。垃圾回收在每个 JVM 上独立运行。
【讨论】:
【参考方案2】:-
见How to Daemonize a Java Program?
将创建新的 JVM 实例
与所有其他进程共享内存的方式相同
由 O/S 管理
其他实例不受影响
如果您的实例必须协调它们的工作,您可以创建一个主实例来运行/停止其他实例。
您没有解释为什么需要多个 JVM 实例。可能,单实例会更好。
【讨论】:
以上是关于java 使用同一台机器用127.0.0.1测试服务端和客户端没有问题,如何设置ip让其它机器做客户端?的主要内容,如果未能解决你的问题,请参考以下文章