实时应用程序的设计(类,方法,接口)(服务器/客户端)

时间:2011-08-11 13:54:07

标签: java network-programming network-protocols

我一直在寻找一本关于这个主题的好书或文章,但没有找到太多。对于特定的场景,我没有找到一个很好的例子 - 一段代码。像客户/服务器对话。 在我的应用程序协议中,他们必须发送/接收消息。喜欢: 服务器想要将文件发送到客户端 客户可以或不, 如果他接受,服务器将通过相同的连接/套接字发送字节。 我的应用程序的其余部分都使用阻塞方法,服务器有一个方法

继承人的所作所为:

服务器方法:

public synchronized void sendFile(File file)
{
  //send messsage asking if I can send a file
  //block on read, waiting for client responde
  //if client answers yes, start sending the bytes
  //else return
}

客户端方法:

public void reciveCommand()
{
   //read/listen for a command from socket
   //if is a send file command handleSendFileCommand();
   //after the return of handleSendFileCommand() listen for another command
}

public void handleSendFileCommand()
{
   //get the file server want to send
   //check if it already has the file
   //if it already has, then send a command to the socket saying it already has and return         
   //else send a command saying server can send the file
   //create a FileInputStream, recive bytes and then return method
}

我百分之百确定这是错误的,因为服务器和客户端无法通过双向通话,我的意思是,当服务器想要向服务器发送命令时,他们必须遵循命令的顺序,直到该对话为止完成后,只有这样,他们才能发送/接收另一系列命令。这就是为什么我做了所有发送请求同步的方法

我没有花很多时间意识到我需要研究这种应用的设计模式...... 我读到了责任链设计模式,但我不知道如何在这种情况下使用它或其他好的设计模式。

我希望有人可以帮我一些代码示例。 提前致谢

1 个答案:

答案 0 :(得分:1)

Java中的

synchronized关键字意味着完全不同的东西 - 它将方法或代码块标记为critical section,一次只能执行单个线程。你在这里不需要它。

然后,TCP连接在字节流级别上是双向的。服务器和客户端之间的同步由交换的消息驱动。将客户端(同样非常适用于服务器)视为state machine。某些类型的消息在当前状态下是可接受的,有些不是,有些则将节点切换到不同的状态。

由于您正在研究设计模式,State pattern在这里非常适用。