web与服务端:第二篇 原始的单进程CGI服务器通讯方式
书接上回,我们知道服务器与客户端之间可以通过建立tcp连接,使用套接字进行通信。这个时候假如说我们有非常多的客户端需要访问服务器,服务器就需要不断的开启进程哪怕我们的内存处理机制再优秀,也无法处理数量如此庞大的客户端群体。这个时候,人们就想出来很多方案,假如我们只是请求一个静态的页面,就像这个博客一样,只要看上面的内容,就可以搭建一个分发网络,专门传送静态文件,静态页面,发送完成后立即释放客户端,这样可以有效的减轻服务器的压力,而且经过专门的存储优化,可以使得速度和连接数量大大提升。但是我们还是需要开启应用程序来处理那些必须与服务器交互的web请求,比如数据库服务器等等。这些web应用程序与客户端的通信,他们所依赖的协议就叫做cgi协议。
前言
所谓cgi协议(common gateway interface)-通用网关接口,我们很难见名思意,啥网关,啥接口?啊?所以我们先不管这些。
简单来说,就是客户端与服务器的web应用程序之间动态请求需要遵从的一种通信协议。通过cgi协议,再结合web应用程序就可以处理用户请求啦。
为啥要这么做?
在上一章节,我们知道,搭建一个简单的socke ...
web开发:第一篇 一个简单的socket套接字通讯
最近看了很多服务器与客户端通讯的程序以及架构,这里简单的总结一下。(资料大多来源于网上)
写在前面
现在假设一个非常非常简单的场景,我们有两个设备或者是程序之间需要通信。
如果这两个设备靠的很近,或者说在同一个区域内,那么我们可以使用信号线将他们相连接,并且通过高低电平或者是差分信号进行传输二进制数据。并且拟定一个简单的通信协议就可以进行通信了,例如这个文章里面写的。简单的通信协议
但是如果他们相隔较远,那么我们就可以依靠网络来进行通信,因为世界是由网络所连接在一起的,只要在任何有网络的地方都可以实现设备之间的通信。我们的网络是基于TCP/IP协议族设计的通讯协议,这里简单的抄一张网上的图来回顾一下TCP/IP协议族的通讯流程。
不同于OSI模型,TCP/IP协议参考模型把所有的TCP/IP系列协议归类到四个抽象层中。
每一抽象层建立在低一层提供的服务上,并且为高一层提供服务。
但是,直接进行TCP/UDP通信的话,这些操作还是太复杂了,我们需要一个更加抽象的方式,来提供简单易用的接口来供应用层使用。从而使得在网络上的两个设备的进程之间相当于可以直接进行通信,我们把这种封装加做套接 ...
工具篇:第五篇 通过X11(X window system) 图形用户界面系统,将远程计算机的图形应用程序显示在本地
在上一篇中我们最后有提到如何将服务器上的UI图片显示在本地,这一期来补上这个坑。
前言
熟悉Windows和macOS的同学在第一次使用X的时候可能会感到惊讶,因为这与传统的显示方式有所不同。普通人可能会直观的认为操作系统就应该是用户界面+软件内核的形式,但是也诧异Linux可以在不依赖图形界面的情况下工作,同时也可以加载不同的图形界面。熟悉linux的同学可能也对命令行习以为常了,但是并不知道这个图形界面是如何实现的以及为什么要这样设计。
client-server模型
X采用client-server模型,这些模型与我们常见的client-server模型有所不同,常见的client-server结构中,称提供服务的一方为server,即服务器端(如HTTP服务,FTP服务 等),使用服务的称为client,即客户端。但在X中,client是执行程序的一方,在上面执行各种X程序,而server则是负责显示client运行程序的窗口的一方。
X windows,笼统的称为X,是一种位图显示的视窗系统,是建立图形用户界面的标准工具包和协议。X 是协议,不是具体的应用程序。X 为GUI环 ...
嵌入式 第一篇 一个简单的基础通信协议的设计与实现
不同设备之间的通信,都需要设计自己的通信协议。为了保证设备与设备之间的数据的稳定传输,通信协议的设计需要考虑很多的问题。当然应对不同的应用场景,可以有针对性的设计不同的通信协议。
一种常见的通信协议格式
这是一种我们比较常见的通信协议格式
帧头部
地址位
功能位
帧序号
数据长度
数据内容
校验位
帧尾
1/2字节
1字节
1字节
1字节
1字节
n字节
1字节
1/2字节
而为了应对不同的情况,可以依照情况做删改,例如减少帧头和帧尾,减少帧序号等等。
而本篇实现的通信协议如下,这里将几个部分都做了,实际中可能并不需要这么冗余的帧,可以按需求适当删改:
|地址位|功能位|帧序号|数据长度|数据内容|校验位|
|----|----|----|----|----|----|----|
|1字节|1字节|1字节|1字节|n字节|1字节|
本篇例程使用的开发板是STM32F103VET6,应用工具是MDK-ARM v5.33,STM32CubeMX V6.1.1
注:STM32CubeMX需要安装JAVA环境(JRE)。
搭建串口收发环境
参考:https://blog.c ...
工具篇:第四篇 使用xmake编译stm32项目
xmake 是一个基于 Lua 的轻量级跨平台构建工具,使用 xmake.lua 维护项目构建,相比 makefile/CMakeLists.txt,配置语法更加简洁直观,对新手非常友好,短时间内就能快速入门,能够让用户把更多的精力集中在实际的项目开发上。
前言
依我这几天学习cmake和xmake来说,xmake的构建项目的能力非常强大,并且速度也非常快,语法也是非常现代化。
同时,它也是一个自满足的构建系统,拥有强大的包管理系统,快速的构建引擎。
而且xmake的开发者活跃度较高,经常在线。
所以我决定用它来构建一个由cubeMX生成的stm32的项目。
安装xmake
项目地址:https://github.com/xmake-io/xmake/releases
windows
点击链接下载xmake的安装包,包名一般是xmake-[version].[win32|win64].exe,或者下载xmake-[version].[win32|win64].zip的包,解压后添加该路径到环境变量中。
或者可以使用winget install xmake安装。
linux
我这里的 ...
工具篇:第三篇 秘密工具
经常需要访问Github以及Google学术等网站,但是由于某些原因,国内访问较慢,所以整理一下穿墙的工具。当然,最可靠的还是自己搭建境外服务器配合V2Ray来穿墙。
穿墙服务提供商
用过很多个穿墙服务提供商,只留下了这几个,随时更新。
Bywave
好处是有一个按量付费套餐,对于我这种用流量不大的用户来说,非常的合适。而且足够的稳定,快速。
邀请链接:https://byw.tv/aff.php?aff=9360https://byw.tv/aff
SockBoom
SockBoom的优势在于非常的便宜,虽然稳定性不如上面那个,但是8块钱一个月还要啥自行车。
邀请链接:https://sockboom.site/auth/register?affid=36661
辣条
这个特便宜,只要2元/10G/月,对于使用量不大,只是访问一下谷歌学术的话,可以考虑一下这个。
邀请链接:https://latiao.club/#/register?code=XCycAA4c
穿墙工具
V2Ray
V2Ray 是一个网络转发程序,支持 TCP、mKCP、WebSocket 这3种底层传输协议,支持 ...
工具篇:第二篇 FRP(fast reverse proxy)内网穿透,服务端搭建与客户端配置方法
frp 是一个专注于内网穿透的高性能的反向代理应用,支持 TCP、UDP、HTTP、HTTPS 等多种协议。可以将内网服务以安全、便捷的方式通过具有公网 IP 节点的中转暴露到公网。
为什么使用 frp ?
通过在具有公网 IP 的节点上部署 frp 服务端,可以轻松地将内网服务穿透到公网,同时提供诸多专业的功能特性,这包括:
客户端服务端通信支持 TCP、KCP 以及 Websocket 等多种协议。
采用 TCP 连接流式复用,在单个连接间承载更多请求,节省连接建立时间。
代理组间的负载均衡。
端口复用,多个服务通过同一个服务端端口暴露。
多个原生支持的客户端插件(静态文件查看,HTTP、SOCK5 代理等),便于独立使用 frp 客户端完成某些工作。
高度扩展性的服务端插件系统,方便结合自身需求进行功能扩展。
服务端和客户端 UI 页面。
简单来说:简洁好用,配置方便,只要有一台公网服务器就可以使你的电脑实现内网穿透,将特定的端口映射到公网上去。
测试设备
下面是我的环境:
服务器 ubuntu 20.04 LTS x86_64
本地PC windows 11 22000 ...
OFFICE篇:第一篇 EXCEL快速翻译表格
快速翻译EXCEL表格。
方法
在表格中输入公式=FILTERXML(WEBSERVICE("http://fanyi.youdao.com/translate?&i="&B5&"&doctype=xml&version"),"//translation")
公式中的&B5&为需要翻译的单元格,可以修改为你想要的单元格如&A4&等。
效果如下,可以进行简单的中英互译,如果有大量的表格需要翻译,可以拖动单元格右下角的+号下拉快速翻译。
工具篇:第一篇 通过VSCode连接服务器进行远程开发
前言
最近经常需要连接到实验室的服务器里面敲代码,但是受限于网络拨动,经常会卡顿,而且嫌远程桌面连接太麻烦,就决定配置一下vscode,使其能够直接使用本地的vscode远程到服务器上面进行开发。
VSCode介绍
Visual Studio Code (简称 VS Code / VSC) 是一款免费开源的现代化轻量级代码编辑器,支持几乎所有主流的开发语言的语法高亮、智能代码补全、自定义热键、括号匹配、代码片段、代码对比 Diff、GIT 等特性,支持插件扩展,并针对网页开发和云端应用开发做了优化。软件跨平台支持 Win、Mac 以及 Linux。 ————百科
我喜欢叫他高级版记事本,最主要的特点就是支持各种丰富的插件。
原理
下载并安装VSCode
打开VSCode官网https://code.visualstudio.com/。
直接点击下载按钮,稍等片刻,然后会弹出下载提示框。如果你没有梯子的话,下载速度可能会有点慢,可以考虑使用国内镜像来下载,具体方法是复制下载链接如:
1https://az764295.vo.msecnd.net/stable/ccbaa2d27e3 ...
经典算法:第二篇 自动控制理论之PID控制算法
在自动控制理论中,最负盛名的莫过于PID控制算法了。原理简单,应用广泛,受到很多的工程师们的喜爱。在稚晖君最新的视频BV1jE41137eu中,他设计的’自行车’XUAN的自行车车头无刷电机的控制算法就是PID控制算法。
前言
在过程控制中,按偏差的比例(P)、积分(I)和微分(D)进行控制的PID控制器(亦称PID调节器)是应用最为广泛的一种自动控制器。它具有原理简单,易于实现,适用面广,控制参数相互独立,参数的选定比较简单等优点;而且在理论上可以证明,对于过程控制的典型对象──“一阶滞后+纯滞后”与“二阶滞后+纯滞后”的控制对象,PID控制器是一种最优控制。PID调节规律是连续系统动态品质校正的一种有效方法,它的参数整定方式简便,结构改变灵活(PI、PD、…)。
在工业过程中,连续控制系统的理想PID控制规律为:
u(t)=Kp(e(t)+1Tt∫0te(t)dt+TDde(t)dt)u(t)=K_p(e(t)+\frac{1}{T_t}\int_0^te(t)dt+T_D\frac{de(t)}{dt})
u(t)=Kp(e(t)+Tt1∫0te(t)dt+TDdtde ...