Architecture 客户端-服务器和发布-订阅混合的体系结构样式

Architecture 客户端-服务器和发布-订阅混合的体系结构样式,architecture,client-server,publish-subscribe,Architecture,Client Server,Publish Subscribe,我正在为一个基本的在线协作IDE构建一个Java应用程序。在此应用程序中,客户机向服务器发送命令,服务器序列化这些命令,然后将结果返回给每个客户机。我试图确定一种架构风格,它将最大限度地提高代码的性能、效率和简单性 目前,我正在使用客户机-服务器模型和发布-订阅模型之间的某种混合。客户端向服务器发送命令(即编辑代码、远程编译等请求)。对于特定的客户端命令,在服务器响应该命令之前,客户端上的文件实际上不会更改。由于该项目的主要目标之一是IDE允许实时协作,因此每次输入键盘时都会发送客户端命令。这是

我正在为一个基本的在线协作IDE构建一个Java应用程序。在此应用程序中,客户机向服务器发送命令,服务器序列化这些命令,然后将结果返回给每个客户机。我试图确定一种架构风格,它将最大限度地提高代码的性能、效率和简单性

目前,我正在使用客户机-服务器模型和发布-订阅模型之间的某种混合。客户端向服务器发送命令(即编辑代码、远程编译等请求)。对于特定的客户端命令,在服务器响应该命令之前,客户端上的文件实际上不会更改。由于该项目的主要目标之一是IDE允许实时协作,因此每次输入键盘时都会发送客户端命令。这是客户机-服务器方面

但是,由于客户端还必须接收从其他客户端转发给它们的事件,因此它不是纯客户端-服务器设置。我正在使用ExecutorService类来实现这种发布-订阅行为


我的问题是-是否有一种特定的体系结构样式与这样的应用程序相对应?我是否可以采取其他方法来实现应用程序目标?或者,也许我已经在使用最好的架构样式了?

混合样式在复杂系统中很常见。最重要的是要确保所使用的样式所提升的质量属性相互补充,并且不会产生张力。显然,所造成的紧张局势需要得到解决

似乎有一个隐藏的质量属性,“在服务器响应命令之前,客户端上的文件实际上不会更改”,这表明了除了发布-订阅之外,您选择使用调用返回样式的原因。我确实担心为了性能而在这里进行阻塞调用,但您也需要担心数据完整性问题

稍微考虑一下,您似乎可以使用纯发布-订阅样式来处理正确的消息集


在“使用正确的样式”方面——关注您的质量属性,并具体说明您的设计决策促进和抑制了什么。根据您在这里所写的内容,我认为还有一些其他场景需要充实,以便现在就真正有力地证明一种风格优于另一种风格。

对我来说,它们不是对手。基本上,“客户机-服务器”更多地是关于工作负载分布的,而“发布-订阅”是关于消息分布实现的。Quake服务器完全相同:)