Запрос дизайна о определении новых событий в верхней части существующего набора событий для протокола сокета
Вопрос
Я написал Java Server и клиентскую программу, используя JBoss Netty. Чтобы отправить некоторые данные в удаленный клиент и получить от них данные, я определил события и обработчики для каждого события. На проводе каждое событие представляет собой только один байт (OPCODE) заголовок, за которым следует байты сообщения. Первоначально я поддерживал только 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. Это лучший подход?
Решение
Вы можете использовать заводской шаблон для создания соединения на основе типового канала, т.е. TCP или UDP. Другие подробности вам придется определить один раз в этом случае
Вместо этого вызов data_out вы можете назвать его как server_out server_in server_in