我不确定在这里问什么问题,因为我不知道词汇......
Tomcat servlet(以及与此相关的任何服务器)如果它们是无状态的并且可以快速响应请求并将状态存储在数据库中,那么它们可以很好地工作。似乎如果我有长时间运行的操作,那么也许我想在后台运行一些其他服务,并让 Tomcat 处理程序与之通信。有没有办法在与 Tomcat 相同的 JVM 中运行长时间运行的 Java 应用程序并通过“常规”Tomcat servlet 与之交互?
示例:假设我想在 HTTP 中提供 RESTful 数字分解服务。
这是一个可能的情况(我希望我的 HTTP 语法正确,我省略了大部分标头):
# comments start with #, > = request, < = response
#
# first we create a queue
> POST /factorizer/create-queue
> {information here}
< queue=12345B
# then we post some numbers to it
> POST /factorizer/queue/12345B
> 123
> 456
> 678
> 12345678901234567890123456789
< OK
# let's look at the status
> GET /factorizer/queue/12345B/status
< requested=4
< processed=3
# query
> GET /factorizer/queue/12345B/7
< Error: invalid index
> GET /factorizer/queue/12345B/3
< Error: not complete
> GET /factorizer/queue/12345B/0
< 123=3*41
# wait a while
> GET /factorizer/queue/12345B/status
< requested=4
< processed=4
> GET /factorizer/queue/12345B/3
< 12345678901234567890123456789=3*3*3*7*13*31*37*211*241*2161*3607*3803*2906161
我可以考虑如何编写 servlet 来处理查询,但是我怎么能在同一个 JVM 中实现一个守护进程/独立运行的服务呢?
编辑:在上面的例子中,我想做的是让后台应用程序自动运行,使用工作队列,分解素数,并有一个 Java 接口,支持 Tomcat servlet 可以用来公开为网络服务。然后我不必担心后台应用程序中的 Web 界面或 HTTP,也不必担心 servlet 中的多线程问题或素数分解。