Я искал хорошую книгу или статью на эту тему, но не нашел много.Я не нашел хороший пример - кусок кода - для конкретного сценария.Как клиент / сервер разговор.В протоколе моего приложения они должны отправлять / получать сообщения.Например: сервер хочет отправить файл клиенту. Клиент может принять или нет, если он согласится, сервер отправит байты через одно и то же соединение / сокет.Все остальное мое приложение использует методы блокировки, у сервера есть метод
Вот что я сделал:
Метод сервера:
public synchronized void sendFile(File file)
{
//send messsage asking if I can send a file
//block on read, waiting for client responde
//if client answers yes, start sending the bytes
//else return
}
Методы клиента:
public void reciveCommand()
{
//read/listen for a command from socket
//if is a send file command handleSendFileCommand();
//after the return of handleSendFileCommand() listen for another command
}
public void handleSendFileCommand()
{
//get the file server want to send
//check if it already has the file
//if it already has, then send a command to the socket saying it already has and return
//else send a command saying server can send the file
//create a FileInputStream, recive bytes and then return method
}
Я на 100% уверен, что это неправильно, потому что сервер и клиенты не могли бы говорить двунаправленно, я имею в виду, что когда сервер хочет отправить команду серверу, он должен следовать порядку команд до тех пор, покаРазговор закончен, только тогда они могут отправить / получить другую последовательность команд.Вот почему я сделал все методы, отправляющие запросы, синхронизированными
Мне не потребовалось много времени, чтобы понять, что мне нужно изучить шаблоны проектирования для такого типа приложений ... Я читал о шаблоне проектирования Chain of Responsibility, ноЯ не понимаю, как я могу использовать это или другой хороший шаблон дизайна в этой ситуации.
Я надеюсь, что кто-то может помочь мне с некоторым примером кода.Заранее спасибо