此问题已在开发模式(Eclipse ...)中进行了测试和发生。
我有一个配置的后端(在backends.xml中):
<backends>
<backend name="example">
<class>B8</class>
<options>
<instances>1</instances>
<public>false</public>
<dynamic>true</dynamic>
</options>
</backend>
</backends>
如您所见,它明确地设置为“动态”。
这是我的web.xml:
<?xml version="1.0" encoding="utf-8"?>
<web-app xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xmlns="http://java.sun.com/xml/ns/javaee" xmlns:web="http://java.sun.com/xml/ns/javaee/web-app_2_5.xsd"
xsi:schemaLocation="http://java.sun.com/xml/ns/javaee
http://java.sun.com/xml/ns/javaee/web-app_2_5.xsd"
version="2.5">
<servlet>
<servlet-name>backend_test</servlet-name>
<servlet-class>BackendTest</servlet-class>
</servlet>
<servlet-mapping>
<servlet-name>backend_test</servlet-name>
<url-pattern>/_ah/start</url-pattern>
</servlet-mapping>
</web-app>
..只是后端的常规servlet入口点。
这是后端的Java代码:
import java.io.IOException;
import javax.servlet.ServletException;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
@SuppressWarnings("serial")
public class BackendTest extends HttpServlet
{
@Override
public void doGet(HttpServletRequest req, HttpServletResponse res)
throws ServletException, IOException
{
System.out.println("Backend started!");
// ............
System.out.println("Backend terminating!");
}
}
现在,当我点击F11并开始调试应用程序时,这是控制台中的输出:
INFO: The server is running at http://localhost:8888/
Backend started!
Backend terminating!
如果我正确理解this doc line,则不应该开始,直到我请求/_ah/start
(http)。
它清楚地说:
当您启动动态后端时,App Engine允许它接受 流量,但/ _ah / start请求不会发送到实例,直到 它收到第一个用户请求。
与此问题相关的另一个副作用是,后端似乎永远不会“停止”,我的意思是它仍处于“运行”状态(正如我在http://127.0.0.1:8888/_ah/admin/backends的管理区域中看到的那样) 。
终止后(在上面的代码中,因为它在控制台中清楚地打印出来),几分钟后不应该关机吗? (我等了大约20分钟。)
我做错了什么?
顺便说一句,我的最终目标是在“后端”上下文中运行一些代码,就像运行“任务”一样。由于CPU / RAM功率和无时间限制,我想要一个“后端”。
请赐教。 谢谢!