Grizzly - Как отправить строку клиенту

Я не могу понять, как отправить простую строку клиенту. Каждый раз, когда я пробую это так

@Override
public NextAction handleRead(FilterChainContext ctx) throws IOException {
    ctx.write("test");
    return ctx.getInvokeAction();
}

выдает ошибку:

java.lang.ClassCastException: java.lang.String нельзя преобразовать в org.glassfish.grizzly.asyncqueue.WritableMessage

Я попытался реализовать свой собственный WritableMessage, который затем отправляет, но он не работает. Я не могу понять, как настроить его правильно, или если это правильный путь.


person Limnic    schedule 10.04.2014    source источник


Ответы (1)


Вам нужно добавить StringFilter, как в примере https://github.com/GrizzlyNIO/grizzly-mirror/blob/2.3.x/samples/framework-samples/src/main/java/org/glassfish/grizzly/samples/echo/EchoClient.java

person alexey    schedule 11.04.2014
comment
Хорошо, тогда как мне его настроить, чтобы я мог отправлять строки клиенту, а также анализировать байты на сервере. Мой собственный фильтр больше не получает данные (текущая настройка цепочки: TransportFilter-StringFilter-мой собственный фильтр) - person Limnic; 11.04.2014
comment
это зависит от того, как вы переводите byte[] в String. Ваш протокол основан на строке? Ваш клиент также отправляет строки? - person alexey; 15.04.2014
comment
Протокол основан на байтах. Клиент не отправляет строки. Однако я хочу иметь возможность отправлять строку клиенту независимо от протокола. Это будет работать как второй протокол. - person Limnic; 18.04.2014
comment
если вы хотите отправлять строки, но получать буфер - просто расширьте StringFilter и переопределите метод handleRead(...) как handleRead(...) {return ctx.getInvokeAction());} - person alexey; 19.04.2014