Нам нужно создать сервер, который будет обслуживать веб-страницу нескольким клиентам, а также запросить удаленную базу данных для этих клиентов. Одним из требований этого проекта является то, что вся система должна соответствовать стилю архитектуры REST. Нам нужно использовать Java в качестве языка программирования, но при разработке мы создали много вопросов.О программировании сокетов и дизайне REST
Мы хотим, чтобы основной поток, который получит соединения, как показано в следующем примере:
// System.out.println("Starting a new web server using port " + port)
try {
ServerSocket reciever = new ServerSocket(port);
while (true) {
try {
Socket s = reciever.accept();
Client c = new Client(s);
} catch (IOException e) {
System.err.println("New item creation failed.");
IOUtil.close(reciever);
} catch (InterruptedException e) {
e.printStackTrace();
}
}
} catch (IOException e) {
System.err.println("ServerSocket problem.");
}
Затем каждое соединение будет создано как новый поток (объект клиента в коде), который будет принимать уход за чтением ОДНОГО запроса. Если запрос является GET, поток будет обслуживать ресурс для клиента. Если это POST, то он добавит запрос в буфер, а другой поток обработает запрос в базе данных, а также ответ обратно клиенту. После обработки этого единственного запроса поток закрывает сокет и завершается.
Является ли использование гнезд нарушением принципа REST? Чтобы уважать архитектуру REST, нужно ли уничтожать каждый объект Client (нить & сокет) после каждого HTTP-сообщения? Есть ли другой способ взаимодействия клиент-сервер, который не использует сокеты?
Почему вы не используете JEE? Вся информация о сервере позаботится о вас, все, что вам нужно сделать, это решить, какой путь должна выполнять функция, и написать какую-то логику (если вы решите использовать сервлеты).Серьезно, вы не должны тратить время на повторное изобретательство колеса. – thecoshman
Итак, мы посмотрели на Apache HHTPComponents, это похоже на хороший API для нашей задачи. Это то, о чем вы говорите? – tyrana4
Что? AFAIK Apache не имеет ничего общего с JEE. Вы будете запускать «контейнер», что-то вроде JBoss. Этот контейнер будет управлять всем скучным веб-материалом. Затем вы можете просто написать один класс (для начала), аннотировать функцию с чем-то вроде '@Path ('/ mySite/cakes /')', и эта функция будет вызываться для любого URL-адреса, который соответствует этому. – thecoshman