随着云原生(Cloud Native)的兴起,面向服务架构(Service-Oriented Architecture,SOA)、微服务(Microservice)、容器(Container)等相关概念与技术正在逐渐影响CAx(CAD/CAE/CAM)软件的架构设计与开发。
在云原生CAx软件中,首先需要把系统按照功能划分成不同的服务单元,然后再根据业务流程完成各种服务的集成(Enterprise Application Integration,EAI)。Web Services、Microservice是将应用程序转换成服务的常用方法,而这些技术实际上大多数都是以HTTP为基础的。
因此,非常有必要对HTTP的概念、原理等基础知识进行总结,以期能够更好的进行云原生CAx软件的设计与开发。
注1:限于研究水平,分析难免不当,欢迎批评指正。
注2:文章内容会不定期更新。
一、HTTP基础
HTTP(HyperText Transfer Protocol, 超文本传输协议)是一种采用"请求-应答"通信模式、运行在TCP协议之上的应用层协议,早期主要应用于Web服务器与客户端之间HTML数据传输。
1.1 HTTP工作原理
HTTP采用请求-应答通信模式,一般用于B/S架构中HTTP Client与HTTP Server之间的网络通信。
首先,HTTP Client(通常是浏览器)创建一个到HTTP Server指定端口(默认为80端口)的TCP连接,然后HTTP Client向HTTP Server发送HTTP请求报文。
HTTP server收到HTTP请求报文之后,完成HTTP请求报文数据报文解析,执行对应的业务逻辑,然后将状态码、处理结果等写入到一个HTTP响应报文,并将该HTTP响应报文返还给HTTP Client。
HTTP Client收到HTTP响应报文之后,根据返还状态、处理结果等完成显示、数据存储等工作。
1.2 HTTP数据报文
HTTP请求报文由请求行、请求头部、空行、请求数据等四个部分组成。
HTTP响应报文由状态行、消息报头、空行、响应正文等四个部分组成。
1.3 浏览器架构
二、实现与衍生
2.1 Boost
Module | Description | Scenario |
Beast | Portable HTTP, WebSocket, and network operations using only C++11 and Boost.Asio | |
2.2 Qt
Module | Description | Scenario |
Qt Network | Classes to make network programming easier and more portable. Currently HTTP, FTP and local file URLs are supported for uploading and downloading. | 封装了套接字,也实现了HTTP、FTP等常见网络协议 |
Qt WebSockets | Provides WebSocket communication compliant with RFC 6455. It provides an implementation for the WebSocket protocol, which is offered by IETF (Internet Engineering Task Force) as a better alternative for bidirectional communication using the existing web infrastructure. | 服务端主动向客户端推送数据 |
Qt WebChannel | Provides access to QObject or QML objects from HTML clients for seamless integration of Qt applications with HTML/JavaScript clients. | 基于Qt的Server应用 |
Qt WebKit | The QtWebKit module provides a web browser engine as well as classes to render and interact with web content | 在Qt5中,被Qt WebEngine替换 |
Qt WebEngine | Classes and functions for embedding web content in applications using the Chromium browser project. | 作为Qt WebEngine替换者,在应用中显示Web内容 |
Qt WebView | Displays web content in a QML application by using APIs native to the platform, without the need to include a full web browser stack. | 在QML程序中显示Web内容 |
Qt for WebAssembly | A platform target to compile Qt applications for the web browsers using WebAssembly. | 将Qt应用嵌入到Web页面 |
2.3 Web Services
2.4 ESB
2.5 API GateWay
2.6 WebGL and Three.js
参考文献
罗军舟. TCP/IP协议及网络编程技术. 清华大学, 2004.
Joseph Ingeno. Handbook of Software Architecture.
顾宁. Web Services原理与研发实践. 机械工业出版社, 2005.
网络资料
大型CAx(CAD/CAE/CAM)工业软件开发中的关键组件https://blog.csdn.net/qq_26221775/article/details/123193318?spm=1001.2014.3001.5501
HTTP 1.1https://datatracker.ietf.org/doc/html/rfc2616
Google Chromehttps://www.google.cn/intl/en_uk/chrome/
The Chromium Projectshttps://www.chromium.org/Home/
gSOAPhttps://www.genivia.com/
Boosthttps://www.boost.org/doc/libs/1_80_0/
Qt5 All Moduleshttps://doc.qt.io/qt-5/qtmodules.html
Qt5 Porting Guidehttps://doc.qt.io/qt-5/portingguide.html
Qt4.8 WebKithttps://doc.qt.io/archives/qt-4.8/qtwebkit-module.html
WebSockethttps://datatracker.ietf.org/doc/html/rfc6455
Qt for WebAssemblyhttps://doc.qt.io/qt-5/wasm.html
Spring Web Serviceshttps://spring.io/projects/spring-ws
OpenESBhttp://www.open-esb.net/
Pattern: API Gateway / Backends for Frontends Contexthttps://microservices.io/patterns/apigateway.html
Spring Cloud Gatewayhttps://spring.io/projects/spring-cloud-gateway
Netflix Zuulhttps://github.com/Netflix/zuul
Nginx http://nginx.org/en/index.html
Konghttps://github.com/Kong/kong
WebGL https://www.khronos.org/webgl/
Three.js https://threejs.org/