【问题标题】:What OOD design pattern should be used for a server-handle-client request ?服务器-句柄-客户端请求应该使用什么OOD设计模式?
【发布时间】:2011-10-23 01:33:03
【问题描述】:

对于服务器-句柄-客户端请求,应该使用哪种 OOD 设计模式?

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

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

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

我说的对吗?更好的想法?

谢谢

【问题讨论】:

  • FWIW,我认为如果您不确定要使用哪种模式,最好先解决问题,然后再决定哪种模式最能描述解决方案,看看这种实现是否允许您清理完全没有。当您知道该模式解决了问题时,从设计模式开始是很棒的,但是如果您不确定,那么您只是将自己限制在解决其他很可能不是您的问题的问题上。很难想象一个服务器-客户端交互不能松散地描述为一种消息交换模式,所以这个标签什么都没有。
  • +1 给史蒂夫。按被认为有害的模式设计。
  • 我同意你的看法。但是,在我开始编码之前,我必须有一个关于如何解决问题的基本框架。那就是哪种模式可以帮助我解决它。对吗?

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


【解决方案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"

我希望这会有所帮助, 问候,

【讨论】:

    【解决方案2】:

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

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2017-04-30
      • 2023-04-02
      • 2012-09-22
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2013-07-28
      相关资源
      最近更新 更多