协议不可知服务器的架构设计

时间:2016-06-02 11:50:30

标签: http tcp architecture websocket server

我想构建一个能够处理TCP,HTTP和Websockets协议(不是并发)的服务器,并且无论在运行时使用什么协议,它都能够工作。

基本上我不会以不同方式处理每种类型的请求,而是以某种方式制作一般请求对象和一般响应对象。

通过TCP和Websockets接收的消息将具有http请求的结构。

所有请求/消息都是类似REST的。

我应该使用什么架构设计才能不重复每个协议的路由/处理?

1 个答案:

答案 0 :(得分:1)

任何TCP服务器也可以是HTTP服务器。如果您选中https://docs.python.org/2/library/socketserver.htmlhttps://docs.python.org/2/library/basehttpserver.html,您会看到HTTPServer扩展了TCPServer。

在您的TCP服务器中发出请求之后,只需查看它是否是“HTTP请求”(这是困难的部分)并将其转发到HTTP路由器(几乎任何语言中任何体面的MVC框架都有一个)。

如果我们认为TCP请求和HTTP请求类似,您可以在HTTP请求中转换TCP请求并将其转发到同一路由器。无论如何,这种方法可以减慢所有处理速度。

此外,如果您已经只有TCP客户端&服务器,然后由于HTTP引入了一些开销,我会单独保留它们。因此,另一种方法是根据协议单独保留服务器和路由器,并仅使用业务逻辑类(模型)作为公共层。

TCP Server --> FC -->TCP Router --> TCPController(Controller) --> TCP Response
                                         |
                                         \/
                                       Model
                                         /\
                                         |
HTTP Server --> FC --> HTTP Router --> HTTPController(Controller) --> HTTP Response

* FC =前置控制器

使用这种方法,您可以随时用另一个替换HTTP Server,这可以带来多种好处:使用众所周知的Web服务器(如nginx)或自己用不同语言编写的自定义服务器。