我有一个问题困扰我一段时间.例如,我有一个多线程服务器,当它收到请求时,它将此请求传递给处理程序,此处理程序将处理此请求.我们使服务器多线程的一个原因是:如果它不是多线程的,当服务器处理此请求时,在意义时间内,另一个请求到来,那么此请求将被丢弃,因为服务器现在不可用.
所以我想知道是否有多线程服务器的替代品,例如,我们可以为非多线程服务器创建一个队列?当它完成一个请求后,它可以从队列中获取另一个请求.
您仍然可以使用带有多线程服务器的单线程引擎。
考虑以下框架 - 如果您有一个正在运行的引擎,它可以是完全单线程的,只需按照收到的顺序处理请求。这允许您在业务逻辑中使用非线程安全组件,并且您已经成功地将网络层与业务逻辑层分开!这是一个双赢的局面。
class Engine implements Runnable {
private final Object requestLock = new Object();
private List<Request> requests = new LinkedList<Request>();
private boolean running = true;
private Request nextRequest() {
synchronized(requestLock) { return requests.poll(); }
}
/**
* The engine is single threaded. It doesn't care about server connections
*/
public void run() {
while(running) {
Request request = nextRequest();
// handle your request as normal
// also consider making a mechanism to send Responses
}
}
}
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
979 次 |
| 最近记录: |