У меня есть ServerSocket
в одном из классов Java-проекта. Этот сокет получает некоторые команды, которые привели к новым действиям. Например:Лучший подход для ServerSocket Java
deleteAllFromDB
-> Удаляет все записи в БД.
sendMsgToX
-> Создание нового сообщения, отправляемые на X.
Что-то вроде:
in = new Scanner(s.getInputStream());
message = in.next();
if (message.equalsIgnoreCase("deleteAllFromDB"){
//code
//more code
//even more code
}
...
Хорошо, я думаю, что у вас появилась идея (это довольно простой, но я использую примеры потому что мои английские навыки могут запутать аудиторию).
Проблема в том, что методы внутри класса становятся все крупнее и тяжелее, поэтому сокет не считывает входящие сообщения до тех пор, пока метод не будет выполнен и не закончен.
Я думаю, что у меня есть 2 подхода к решению этого:
1. многопоточного
Вместо обработки входящих запросов в том же потоке, который принимает соединение клиента, то соединение передается на рабочую нить, которая обрабатывает запрос
http://tutorials.jenkov.com/java-multithreaded-servers/multithreaded-server.html
2. Резьбовые методы
После того, как я прочитал входящий запрос (message=in.next()
), запускаю поток, который отвечает из методов, которые будут выполняться (deleteFromDB, sendMsgToX
и т.д.).
Любой совет был бы действительно оценен. Кроме того, просто для того, чтобы упомянуть, я работаю с базой OSGi, даже я не думаю, что это релевантно для вопроса (на всякий случай ..).
Заранее благодарен!
ли вы рассмотреть вопрос об использовании OSGi оболочки (Гого), которая поддерживает сеансы, которые могут быть легко подключены к розетке? –
Сколько одновременных клиентов вы ожидаете? Вам нужно различать разных клиентов? нормально ли выполнять команды одновременно (так как есть БД, вам придется беспокоиться о транзакциях и атомарности)? – Yuri
У вас есть «Socket». «ServerSocket» не может принимать команды. – EJP