Все,Архитектура для сети клиента/сервера с помощью State Machine
так, я
изобрели
составлен простой протокол, который я хочу использовать для клиента, чтобы поговорить с сервером. Это типичный (я думаю) три фазы макета:
- Установка соединения (со временем будет возможность переговоров)
- Фактические Обмен данными - пакеты, к счастью, путешествия туда и обратно», интерпретируются соответствующим приемником, который действует на них соответственно
- Connection Teardown - одна сторона говорит «не хочу больше», другая сторона говорит «да будет так» (в конечном итоге разрешит другой стороне отправлять некоторые данные, пока это не будет сделано, а не просто закрытие разговор)
Адрес fr amework - простая настройка: сервер выполняет java.net.ServerSocket.accept() и запускает поток для обработки входящего соединения клиентом, который создает java.net.Socket() для хоста/порта, на котором сервер ожидание. Обе стороны используют java.io.InputStream и java.io.OutputStream и выводят данные друг на друга, собирая исходящие и анализируя входящие сообщения. Хорошо, пока.
Пока протокол жестко закодирован. Установление соединения и Teardown довольно хорошо, в то время как часть обмена данными, которую я хочу быть полнодуплексной, в значительной степени беспорядок.
Итак, я думаю, давайте сделаем это по-хорошему и настроим машину состояний, используя, неожиданно, шаблон дизайна с тем же именем. Я довольно ясно понимаю, что должно быть для состояний сервера и клиента, и какие события должны произойти для перехода, и какие действия следует предпринять, когда произойдет переход. Это выглядит хорошо - на бумаге, то есть. На практике я завязал пару вопросов, которые я не могу решить на бумаге.
В частности, входы государственного аппарата ... немного разнообразны. Как я могу быть в состоянии писать данные, читать данные и проверять соединение (возможно, оно было закрыто или может быть повреждено) одновременно? Кроме того, 1-й и 3-й фазы должны получать таймеры, чтобы избежать потенциально бесконечного времени ожидания ответов.
Итак, я был бы благодарен за любую помощь, которая наводит мой разрыв между машиной состояния и машиной состояния кода.
BTW, я тоже могу читать C/C++/C# - нет необходимости переводить на Java (это то, что я использую).