Разработка запроса на определение новых событий поверх существующего набора событий для протокола сокета - PullRequest
0 голосов
/ 11 июня 2011

Я написал java-сервер и клиентскую программу, используя JBoss Netty.Чтобы отправить некоторые данные удаленному клиенту и получить от него данные, я определил события и обработчики для каждого события.В сети каждое событие представляет собой однобайтовый заголовок (код операции), за которым следуют байты сообщения.Первоначально я поддерживал только TCP и определял события, такие как LOG_IN, LOG_OUT, DATA_IN, DATA_OUT и т. Д. В моей программе.Например,

public static final int LOG_IN = 0x08;
public static final int LOG_OUT = 0x0a;

Затем я решил также поддержать UDP и в итоге получил такие события, как LOGIN_UDP, LOGIN_TCP, DATA_OUT_TCP или DATA_OUT_UDP и т. Д., Чтобы на основе сгенерированного события правильный обработчик события получал и записывал егок соответствующему сокету и удаленному порту.

Как видите, первая проблема, с которой я сталкиваюсь, заключается в том, что я почти удвоил количество определенных событий и обработчиков событий при добавлении UDP.Есть ли лучший способ приблизиться к этому сценарию?

Вторая (незначительная) проблема, с которой я сталкиваюсь, заключается в том, что такие события, как DATA_OUT, имеют смысл при записи с сервера на клиент, но при получении того же события на клиенте.Сторона "DATA_OUT" не имеет такого смысла, поскольку это фактически входящие данные для клиента.На данный момент у меня есть декодер, который будет переводить DATA_OUT в DATA_IN.Это лучший подход?

1 Ответ

0 голосов
/ 12 июня 2011

Вы можете использовать фабричный шаблон для создания соединения на основе типа канала, то есть TCP или UDP.Другие детали вам придется определить один раз в этом случае

Вместо вызова DATA_OUT вы можете вызвать его как SERVER_OUT таким же образом SERVER_IN

...