Запрос дизайна о определении новых событий в верхней части существующего набора событий для протокола сокета

StackOverflow https://stackoverflow.com/questions/6317684

  •  26-10-2019
  •  | 
  •  

Вопрос

Я написал 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

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top