我正在尝试创建一个使用一次的HTTP服务器来处理单个回调,并需要帮助在Ruby中找到一个免费的TCP端口.
这是我正在做的事情的骨架:
require 'socket'
t = STDIN.read
port = 8081
while s = TCPServer.new('127.0.0.1', port).accept
puts s.gets
s.print "HTTP/1.1 200/OK\rContent-type: text/plain\r\n\r\n" + t
s.close
exit
end
Run Code Online (Sandbox Code Playgroud)
(它回应第一个连接的标准输入,然后死掉.)
如何自动找到要监听的空闲端口?
这似乎是在远程服务器上启动作业的唯一方法,然后使用唯一的作业ID回调.然后可以查询此作业ID以获取状态信息.为什么原始设计师在安排我永远不会知道的工作时不能只返回作业ID.无法使用单个端口,因为可能会发生与多个回调的冲突; 这样端口只用了+ - 5秒.
到目前为止我只能找到两个,即TinyRadius,它本身不鼓励生产使用和AXL,这是付费的.
JRadius似乎与FreeRADIUS绑定,FreeRADIUS不是一个库,需要大量的cajoling来运行.
我有一个包含两个WAR的EAR文件,war1.war和war2.war.我的application.xml文件如下所示:
<?xml version="1.0" encoding="UTF-8"?>
<application version="5" xmlns="http://java.sun.com/xml/ns/javaee" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://java.sun.com/xml/ns/javaee http://java.sun.com/xml/ns/javaee/application_5.xsd">
<display-name>MyEAR</display-name>
<module>
<web>
<web-uri>war1.war</web-uri>
<context-root>/</context-root>
</web>
</module>
<module>
<web>
<web-uri>war2.war</web-uri>
<context-root>/war2location</context-root>
</web>
</module>
</application>
Run Code Online (Sandbox Code Playgroud)
这导致war2.war在http:// localhost:8080/war2location上可用,这是正确的,但war1.war在http:// localhost:8080 //上 - 注意两个斜杠.
我究竟做错了什么?
请注意,包含在EAR中时会忽略WAR的sun-web.xml文件.