2

我正在努力理解一种在不浪费线程的情况下通知客户的有效方法。当客户端连接到 CometD servlet 时,我想开始监视客户端的服务器端事件,并在它们可用时将它们发布到客户端。这应该在线程池或不使用 servlet 线程的东西中完成。我看到的所有示例都是针对客户端发起的事件和服务器上的侦听器。我需要相反...我是否只是将 Client/ServerSession 对象交给我自己的机器?这似乎是一种常见的模式,但我找不到任何例子。

4

1 回答 1

0

查看 Servlet 3.0 异步 API。特别是,ServletRequest.startAsync()将返回一个AsyncContext对象,您可以“移交给您自己的机器”,然后从您的 servlet doGet()/doPost()/etc 返回。不终止连接。

然后有各种模式可以将数据发送回客户端。我相信您的“自己的机器”可以从中获取ServletResponseAsyncContext写入它。另一种方法是调用which 将导致您dispatch()AsyncContextdoGet()/doPost() 方法再次被调用。

于 2011-06-22T21:58:10.260 回答