我们需要设计一个服务器,它可以为多个客户端提供网页服务,同时也可以为这些客户端查询远程数据库。该项目的要求之一是整个系统必须符合 REST 架构风格。我们需要使用 Java 作为编程语言,但是在我们设计它时出现了许多问题。
我们希望有一个获取连接的主线程,如下例所示:
// 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 架构,我们是否需要在每个 HTTP 消息之后销毁每个 Client 对象(线程和套接字)?是否有另一种不使用套接字的客户端-服务器通信方式?