惯性聚合 高效追踪和阅读你感兴趣的博客、新闻、科技资讯
阅读原文 在惯性聚合中打开

推荐订阅源

cs.CV updates on arXiv.org
cs.CV updates on arXiv.org
M
MIT News - Artificial intelligence
大猫的无限游戏
大猫的无限游戏
The Cloudflare Blog
Apple Machine Learning Research
Apple Machine Learning Research
罗磊的独立博客
Last Week in AI
Last Week in AI
OSCHINA 社区最新新闻
OSCHINA 社区最新新闻
有赞技术团队
有赞技术团队
博客园 - 叶小钗
酷 壳 – CoolShell
酷 壳 – CoolShell
freeCodeCamp Programming Tutorials: Python, JavaScript, Git & More
V
Visual Studio Blog
美团技术团队
F
Fortinet All Blogs
I
Intezer
IT之家
IT之家
T
Threat Research - Cisco Blogs
Blog — PlanetScale
Blog — PlanetScale
Cyber Security Advisories - MS-ISAC
Cyber Security Advisories - MS-ISAC
Know Your Adversary
Know Your Adversary
P
Proofpoint News Feed
cs.CL updates on arXiv.org
cs.CL updates on arXiv.org
Threat Intelligence Blog | Flashpoint
Threat Intelligence Blog | Flashpoint
AWS News Blog
AWS News Blog
P
Palo Alto Networks Blog
S
Securelist
L
LINUX DO - 热门话题
Security Archives - TechRepublic
Security Archives - TechRepublic
N
Netflix TechBlog - Medium
TaoSecurity Blog
TaoSecurity Blog
Scott Helme
Scott Helme
Hugging Face - Blog
Hugging Face - Blog
www.infosecurity-magazine.com
www.infosecurity-magazine.com
Project Zero
Project Zero
U
Unit 42
博客园_首页
博客园 - 司徒正美
S
Security Affairs
V
V2EX
T
Threatpost
T
Tailwind CSS Blog
GbyAI
GbyAI
O
OpenAI News
K
Kaspersky official blog
Y
Y Combinator Blog
宝玉的分享
宝玉的分享
H
Hacker News: Front Page
V2EX - 技术
V2EX - 技术
Security Latest
Security Latest

博客园 - 八爻老骥

Gradle模块化项目中使用了非模块化库的编译方法 系统架构一一前端技术 系统架构一一ORM的应用 WPF下的RibbonApplicationMenu控件自定义 系统架构——多线程的应用 系统架构——前后端分离 为什么要学DirectX? D3D实战-在窗口中画一个三角形 - 八爻老骥 - 博客园 DirectX 入门1-初识DirectX Tool Kit DirectX 12 版 俄罗斯方块 WPF俄罗斯方块改进版 - 八爻老骥 - 博客园 【编程漫谈】用JAVA画多边形 往Angular应用程序中添加DevExtreme 【编程漫谈】程序的运行环境 创建DevExtreme应用程序 【编程漫谈】程序的运行流程 【编程漫谈】程序的进入与退出 【编程漫谈】Hello world! WPF实战俄罗斯方块
【编程漫谈】单机与联机
八爻老骥 · 2019-09-16 · via 博客园 - 八爻老骥

应用程序一般可以分为单机和联机两种类型,单机程序就是在终端设备上可以独立运行的程序,只要打开这个程序就可以提供完整的功能,比如微软的office、一些单机游戏等。而联机程序则分为多个部分,分别运行在不同的机器上,然后通过网络形成一个整体,联机程序包括客户端和服务端两部分,这两端通过既定的数据格式进行通讯,也就是所谓的协议,一般客户端提供用户界面,服务端负责存储和运算。

早些年网络不发达的时候,应用程序基本上单机的,也就说可能windows下边的一个Exe就是整个应用了,最多结合一些文件型数据库,像Access、Sqlite等等,这种应用程序某种程度上来,只是将以前的纸质的东西进行了电子化,本质上没有多少的改变,无非就是节省了一些纸墨,如果工作过程中产生了一些需要周转的文档,那就得导出可阅读的格式,通过一些可移动存储设备进行转移,比如软件、U盘、移动硬盘或是刻成光盘等。

随着信息化程度的提高,这种单机作业的模式,越来越不符合企业的需求,首先,信息的同步很成问题。以前还是用纸传递信息的时候,还可以保证纸张的唯一性,从而可以保证信息的完整性和可靠,通过笔记、印章之类的手段确保纸质信息的合法性。而电子化之后,信息可以随意的复制和修改,这样就不能保证多个副本之间的数据同步,前边刚拟了一份合同,拿去给领导审核,可还没等批复,这边发现有个金额写错了,于是本地改掉了,而磁盘上的依然是错的。

所以在有了网络之后,人们更倾向于通过网络来传输信息,这样可以尽可能及时地将最新的东西传给对方。为了控制副本的同步,通常会建立一个中心服务器,最新的资源全部放到服务器上边,这样所有可以访问的用户,可以通过服务器拿到最终稳定的信息,而且大家的信息来源是一同处,这样就保证了大家所看到的内容是一至的。

不过,联机程序依然存在同步的问题。之前单机程序也就一个人在操作,如果应用程序限制了信息的复制,这样的话就不会产生副本的问题,也因为一个人操作,所以信息修改也是线性的,也就是按时间顺序进行编辑或修改,但联机之后就不一样了,虽然服务器是独立唯一的,服务器上也可以保证只保留一个副本,但客户端是独立的,每个客户端都可以得到一个副本,然后各处独立的进行修改,这样的话,就会产生冲突了,究竟按谁的为准?

早期为处理冲突的问题,一般在服务端作事务处理。所谓事务,就像一个船闸一样,谁先来了谁就先处理,进来之后,将闸门一关,等处理完了再进行下一个处理,如果路途出现了问题,可以先撤销,打开闸门,退出去,让下一个进来。这样的一个过程,就叫事务处理。闸门就是一把锁,将其它信息先锁在外边,以防产生干拢,这就叫做事务锁。

早期的事务在数据库上应用得比较多,信息化的早期的应用就是数据的分享,那时候的服务端主要以数据库系统为主,为了保证数据记录的唯一性和可靠,在数据读写操作的时候,为了保证每个客户端的信息同步,于是便有了事务这一概念。其实事务的作用就是把并必的请求进行线性化,以确保每个人的何改都必须建立前一个人基础之上,而不是前一个人改了一半,你这边改了另一半,这样就会乱套。

联机应用普及之后,单机程序就比较少了,甚至现在游戏也都是以网络游戏为主了。联机程序的复杂度也比单机程序复杂很多,比如前边所说的同步问题,联机程序要多一道这样处理子程序,前边提到过和数据库事务,但实际过程中,光事务还是不够的,有时候数据存储未必能保证放在一个地方,比如有些生产环境里,用的可能不止一个系统,多个系统间还要进行数据同步处理,这就不是事务那简单了,可能要这些系统的前边增加一个集成服务,先统一数据进出口,然后给传送的数据加上数字签名,以保证信息在传输过程不被篡改,且是唯一的。

还有,联机应用多了一层网络用于传输,这样就不能保证在传输过程信息是不是会丢掉,如果断网了,你还得有检测机制,确保传输成功,如果不成功还需要进行重新发送。这又多了一层处理信息可靠性的子程序,好在有许多第三的组件可以直接拿来使用,比如消息队列。另外,还要考虑网络传输安全性的问题,这些在网络的传输的信息,就像走在路上的汽车,随时都可被拦截,黑客可以将拦截的数据进行修改,然后再发出去,这就存在危险了。为了防范这种问题,那就要对网络传输进行加密,让拦截的人看不懂,于是又多了一层安全处理的子程序。

总之,联机程序要比单机复杂很多。随着技术的发展,越来越多的设备接入到了网络,平常我们比较熟悉的手机、平板等,实际上还有一些传感设备,嵌入设备等,但这些都是传统意义上的客户端,它们通过网络传递各自的信息。虽然以后的工作生活更加依赖联机应用,也不是说单机程序就没了市场,有些系统要求联机脱机都能运行的,有网的时候他就是个联机程序,没网的时候他就是个单机程序。无论单机还是联机,最终都是为人服务,根据具体的需求,确定自己所需要的程序类型。