1

Tomcat 7.0 でロングポーリングを実装するために CometProcessor を使用しています。私を悩ませているのは、CometEvent.EventType.BEGIN 以外のイベントを取得できないことです。コードサンプル:

    @Override
    public void event(CometEvent event) throws IOException, ServletException {

    HttpServletRequest request = event.getHttpServletRequest();
    HttpServletResponse response = event.getHttpServletResponse();
    if (event.getEventType() == CometEvent.EventType.BEGIN) {
        LOGGER.info("Begin for session: " + request.getSession(true).getId());
    } else if (event.getEventType() == CometEvent.EventType.ERROR) {
        LOGGER.error("Error for session: " + request.getSession(true).getId());
        event.close();
    } else if (event.getEventType() == CometEvent.EventType.END) {
        LOGGER.info("End for session: " + request.getSession(true).getId());
        event.close();
    } else if (event.getEventType() == CometEvent.EventType.READ) {
        LOGGER.info("Read from session: " + request.getSession(true).getId());
    }

BEGIN イベントで応答オブジェクトをローカル配列に格納するため、メモリ リークが発生する可能性があると思います。

何が間違っているのか考えている人はいますか?

4

1 に答える 1

1

リクエストの終わりを呼び出すものは何もないように見えるので、タイムアウトが発生するまでそこに留まります。私の経験では、begin を呼び出すスレッドのコンテキスト外で、close を呼び出すと END がトリガーされます。

于 2010-10-13T15:15:37.730 に答える