Module Proxy (一) B/S架构的新思考

原创
2021/09/29 22:07
阅读数 2.5K

前后端分离是现代流行的Web架构模型,例如Vue+Spring Boot是很多软件公司常用的开发模型,对比传统的C/S模型会发现有趣之处:

架构对比

在前后端分离后,后端程序员不再面对html、js、css,也不再研究forward和redirect的区别,HTTP服务端弱化了HTTP功能而更趋向于“服务”,这点和传统的C/S服务端非常相似。

例如认证服务都可以定义requet json:

{"login":"admin","passwd":"admin@123"}

服务端返回response josn应答:

{"status":true, "userid":2,"username":"管理员"}

两者的区别是:一个是HTTP接口协议,另一个是TCP Socket接口协议。

博主在这里提出以下问题:

问题一: B/S服务端能否使用C/S服务端采技术,例如采用C++语言做服务端?

问题二: HTTP协议和Socket协议哪个性能好,开发效率高,更能装逼?

问题三: 博主费心画的这个对比,提出这些问题,究竟想干嘛?

问题一 解答:

不能,起码不能简单替换。

原因会逐步说明,先看前后端B/S程序常见的部署和运行方式:

1)富客户端运行在浏览器中,沙箱安全机制不允许富客户端程序启用TCP Socket网络通讯

2)富客户端程序只能访问同一个Nginx HTTP服务,否则会引起跨域问题。

3)Nginx反向代理仍然使用HTTP协议,因此后端程序必须是HTTP服务。

前两点是浏览器标准,我们无法改变,第三点倒是可以想想办法。

问题二 解答:

1)性能肯定是socket好,HTTP协议是在socket基础上封装HTTP头,需要进行一些特殊处理的TCP协议。

2)开发效率不好判定。如果都不用轮子(框架),socket要简单一些,但spring boot大神的出现就很难说了,更多是个人喜好和主观的争论。

3)先发布个定理:”小众语言方可装逼“。你看看Java和.Net程序员能装逼的吗?会的人太多了,没有装逼的上下文。扩展一下这个问题,Socket编程能用哪些语言,HTTP编程又能用哪些语言?

几乎所有能独立运行的语言(不包括Javascript、SQL这些依赖运行环境的)都支持Socket编程,因为Socket是Linux、Windows系统提供的内核功能,各语言只是把这些内核接口封装后即可;而HTTP操作系统内核并未提供,需要各语言按照HTTP协议去实现的,支持Socket的语言远远多于支持HTTP的语言,因此从语言选择角度Socket更能装逼。

你明天可以向周边童鞋们不经意地提一下:”我准备用Eiffel语言搭建后端服务“,然后坐等崇拜吧:)

问题三 解答:

在说出博主的最终目的前,我们再次观察经典的Vue+Nginx+Spring Boot架构:

上图中如果Nginx反向代理支持socket协议,即可支持后端Socket服务程序,因此需要一个能将http协议代理为socket协议的中间件,见下图:

博主的最终目的:实现一个能将http协议反向代理为socket协议的中间件产品,产品名称Module Proxy,详细介绍请看后续章节。

 

展开阅读全文
打赏
0
1 收藏
分享
加载中
更多评论
打赏
0 评论
1 收藏
0
分享
返回顶部
顶部