我想构建一个能够处理TCP,HTTP和Websockets协议(不是并发)的服务器,并且无论在运行时使用什么协议,它都能够工作。
基本上我不会以不同方式处理每种类型的请求,而是以某种方式制作一般请求对象和一般响应对象。
通过TCP和Websockets接收的消息将具有http请求的结构。
所有请求/消息都是类似REST的。
我应该使用什么架构设计才能不重复每个协议的路由/处理?
答案 0 :(得分:1)
任何TCP服务器也可以是HTTP服务器。如果您选中https://docs.python.org/2/library/socketserver.html和https://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)或自己用不同语言编写的自定义服务器。