Обработка входящих сообщений веб-сокета с использованием нескольких потоков в tomcat

Насколько я понимаю (пожалуйста, поправьте меня, если я ошибаюсь), в tomcat входящие сообщения websocket обрабатываются последовательно. Это означает, что если у вас есть 100 входящих сообщений в один веб-сокет, они будут обрабатываться с использованием только одного потока одно за другим от сообщения 1 до сообщения 100.

Но это не работает для меня. Мне нужно одновременно обрабатывать входящие сообщения в веб-сокете, чтобы увеличить пропускную способность моего веб-сокета. Входящие сообщения не зависят друг от друга, поэтому их не нужно обрабатывать последовательно.

Вопрос в том, как настроить tomcat таким образом, чтобы он назначал несколько рабочих потоков на каждый веб-сокет для одновременной обработки входящих сообщений?

Любая подсказка приветствуется.


Здесь в tomcat код, который, как я думаю, блокируется для соединения с веб-сокетом (что имеет смысл):

/**
 * Called when there is data in the ServletInputStream to process.
 *
 * @throws IOException if an I/O error occurs while processing the available
 *                     data
 */
public void onDataAvailable() throws IOException {
    synchronized (connectionReadLock) {
        while (isOpen() && sis.isReady()) {
            // Fill up the input buffer with as much data as we can
            int read = sis.read(
                    inputBuffer, writePos, inputBuffer.length - writePos);
            if (read == 0) {
                return;
            }
            if (read == -1) {
                throw new EOFException();
            }
            writePos += read;
            processInputBuffer();
        }
    }
}

person kaptan    schedule 27.10.2015    source источник


Ответы (1)


Вы не можете настроить Tomcat так, чтобы он делал то, что вы хотите. Вам нужно написать обработчик сообщений, который потребляет сообщение, передает его исполнителю (или аналогичному для обработки), а затем возвращает.

person Mark Thomas    schedule 02.11.2015