В Netty можно ли получить несколько запросов в одном соединении TCP? - PullRequest
0 голосов
/ 12 декабря 2018

В netty можно получить второй запрос от того же tcp-клиента, пока выполняется первый запрос.

Ниже приведен пример кода, который я пробовал:

public class SomethingServerHandler extends SimpleChannelInboundHandler<Object> {
    protected void channelRead0(ChannelHandlerContext ctx, Object msg) throws Exception {
    String stringMessage = (String) msg;
    if (log.isDebugEnabled()) {
        log.debug(stringMessage);
    }
    ctx.fireChannelRead(msg);
    String[] splitMessage = stringMessage.split("::");
    try {
        Thread.sleep(10000);
    } catch (InterruptedException e) {
        e.printStackTrace();
    }
    if ( splitMessage.length != 2 ) {
        ctx.channel().writeAndFlush(stringMessage + "\n\r");
        return;
    }
    if ( channelRepository.get(splitMessage[0]) != null ) {
        channelRepository.get(splitMessage[0]).writeAndFlush(splitMessage[1] + "\n\r");
    }       
}

Из командной строки: локальный порт telnet

string1

string2

Здесь на стороне сервера строка2 печатается через 10 секунд после завершения обработки строки1.Есть ли в любом случае я могу обрабатывать string2 параллельно?

Заранее благодарим за любую помощь.

1 Ответ

0 голосов
/ 12 декабря 2018

Только если вы перенесете работу в другой поток.Вы блокируете EventLoop, что означает, что никакая другая работа не может выполняться в его потоке.Это повлияет не только на это соединение, но и на все другие соединения, которые обрабатываются тем же EventLoop.

...