http://www.35java.com/zhibo/forum.php?mod=viewthread&tid=290&extra=page%3D1



首先要考虑到,缓冲区会同时被两个以上的执行绪进行存取,即伺服器的请求处理执行绪与客户端执行绪,所以必须对缓冲区进行防护。

再来是当缓冲区中没有请求时,伺服器必须等待直到被通知有新的请求。

Guarded Suspension模式关注的是执行的流程架构,以Java来实现这个架构的话如下所示:
  • RequestQueue.java
public class RequestQueue {
    private java.util.LinkedList queue;
    public RequestQueue() {
        queue = new java.util.LinkedList();
    }

    public synchronized Request getRequest() {
        while(queue.size() <= 0) {
            try {
                wait();
            }
            catch(InterruptedException e) {}
        }
        return (Request) queue.removeFirst();
    }

    public synchronized void putRequest(Request request) {
        queue.addLast(request);
        notifyAll();
    }
}

一个例子是多人聊天伺服器,请求可能只是一个客户端送出的聊天讯息,聊天讯息会先存至缓冲区中,伺服器会不断的从缓冲区中取出聊天讯息并发给客户端,如果缓冲区中没有新讯息,则伺服器就进入等待,直到有一个客户端发出聊天讯息并存入缓冲区中,此时伺服器再度被通知,然后再度取出讯息并进行发送。

相关文章:

  • 2022-01-17
  • 2021-09-24
  • 2021-11-16
  • 2022-01-14
  • 2021-09-24
  • 2021-12-02
  • 2021-10-02
  • 2022-03-06
猜你喜欢
  • 2021-09-17
  • 2021-09-19
  • 2021-10-28
  • 2021-10-09
  • 2022-01-04
  • 2022-12-23
相关资源
相似解决方案