什么OOD设计模式应该用于服务器句柄客户端请求?

时间:2011-10-23 01:33:03

标签: c++ c design-patterns client-server

什么OOD设计模式应该用于服务器句柄客户端请求?

我建议使用消息交换模式,允许在组件和应用程序之间交换信息(即消息)。

消息交换模式(MEP)描述了通信协议建立或使用通信信道所需的消息模式。有两种主要的消息交换模式 - 请求 - 响应模式和单向模式。例如,HTTP是请求 - 响应模式协议,UDP具有单向模式。

http://en.wikipedia.org/wiki/Messaging_pattern

我是对的吗?好主意?

由于

2 个答案:

答案 0 :(得分:1)

通过UDP非常熟悉客户端 - 服务器应用程序,我通常使用观察者模式,这在从网络接收数据包时非常有用。只要数据包来自远程计算机,套接字就会接收消息并将其广播给所有侦听器。然后,听众将根据收到的数据做任何他们想做的事情,如下例所示

public class MySocket {
   private socket rawSocket;
   private List<Listeners> dataListeners;
   //.. Initialization
   // This method gets called when data is received
   public receive(byte[] data){
       for(Listener listener : dataListeners) listener.processMessage(data);
   }
   public registerListener(Listener listener){
       dataListeners.add(listener);
   }
   public unRegisterListener(Listener listener){
       dataListeners.remove(listener);
   }
}
// Interface listener to be implemented by whoever want to receive data from a socket
public interface Listener{
   // Method to be implemented by any listener interested in receiving data
   void ProcessMessage(byte[] data);
}
public class MyListener implements Listener{
   @Override
   public void processMessage(byte[] data){
      // Do something with data...
   }
}
// All bits put together
MySocket mySocket = new MySocket();
socket.registerListener(new MyListener());
// Class MyListener can now receive everything that comes from a remote machine through the socket "mySocket"

我希望这有帮助, 的问候,

答案 1 :(得分:0)

是否要使用UDP(单向),HTTP(无状态请求 - 响应)或某种机制取决于应用程序的行为。在需要实时消息传递的地方(如在算法交易中),UDP是第一选择,其中发送数据包的时间变得更加重要,数据包的可靠性。 HTTP是Web应用程序的方法。 但是,这些都是消息传递协议的协议。在应用程序级别,这是我的想法。在客户端 - 服务器应用程序中,通常有许多客户端尝试访问同一服务器。因此,您的服务器应用程序应该能够并行响应多个客户端。因此,在应用程序级别,您应该维护thread pool,并且应该在线程池的线程中处理每个客户端请求。阅读链接以了解有关使用线程池的好处的更多信息,而不是为每个客户端请求创建线程。