Why Not Http?

游戏服务器开发主要是基于socket,或者websocket,很少采用http(可能有部分非常轻量级的服务器选择http)。这是什么原因呢?我们先来看看socket与http之间的区别。

socket与http之间的区别

|----------|------------|----------------|
| | socket | http |
| TCP/IP协议 | 工作在传输层 | 工作在应用层 |
| 链接状态 | 长链接 | 短链接,请求无状态 |
| 通信方向 | 双向通信 | 单项通信,基于请求-响应模式 |
| 数据格式 | 私有协议,自定义格式 | 公有协议 |
[socket与http对比]

选择socket的原因

游戏服务器主要选择socket与客户端进行通信,原因无非是选择socket的优势以及选择http的劣势。下面分成几点来解释。

第一,http是单向通信,基于请求-响应模式。

只能客户端发送请求,服务器才能返回推送。这是一个致命缺陷,也是游戏服务器不采用http的一个最主要的原因。因为服务器需要经常主动推送消息,例如各种icon小红点,系统跑马灯等等。当然,针对http的单向通信,也出现了一些反向ajax技术,或者称为服务端推送(server side push),例如java的第三方依赖cometd。

第二,http是无状态,短链接的。

http无状态特性,决定了每个请求都是独立的。但是很多时候系统是需要状态的,客户端不得不通过cookies或者session来记录会话的状态。同时,http也是短链接的。服务器甚至不知道请求是否来自于预期的客户端,只要有cookies数据参数,任何能发送http数据的终端都能模拟客户端数据发送。这也给客户端数据作弊留下后门,加大服务器风险。

第三,http是公有协议,数据包大,传输安全性差。

http工作在TCP/IP协议中的应用层,具有标准的数据参数格式。服务端传送数据的格式主要是json或者xml,这两种格式属于文本格式,数据包大。

socket工作在TCP/IP协议中的传输层,没有标准协议格式,采用私有协议栈设计。服务端客户端之间是通过字节流来传输数据的,可以采取一些紧凑的数据格式,例如protobuf。也非常方便进行数据加解密。

相关推荐
上海安当技术6 小时前
固件签名与Secure Boot:安当CAS如何构建汽车固件信任链
网络·汽车·信任链·boot·secure·固件签名·安当cas
上海安当技术7 小时前
诊断接入认证:安当CAS如何堵住汽车网络安全的物理后门
网络·web安全·汽车·access·secure·安当cas·诊断接入认证
ze^07 小时前
【软考信息安全】第2章 网络攻击原理与常用方法
网络·web安全·网络安全
这个DBA有点耶8 小时前
数据库一体机架构演进:从硬件堆叠到软硬深度耦合
服务器·网络·数据库·硬件架构·运维开发·database·数据库架构
arbboter8 小时前
【网络工具】NetProxy网络代理用户手册
开发语言·网络·c#·网络代理·网络异常·代理工具
消失的旧时光-194310 小时前
第一篇:Ktor Client 到底是什么?从 Retrofit 迁移理解 Ktor 网络请求架构
网络·架构·retrofit·ktor·dsl
数据知道10 小时前
反序列化漏洞:Java、PHP、Python 三条线各讲透
java·网络·python·安全·网络安全·php
江畔柳前堤10 小时前
Function Calling 与 Tool Calling:从认知到工程的全景深度解析
开发语言·网络·人工智能·深度学习·算法·机器学习·php
LabVIEW开发11 小时前
LabVIEW 通过以太网控制 Yokogawa WT3000 功率分析仪:tmctl.dll 与原始套接字方案
网络·labview·labview知识·labview功能·labview程序
xiaoxiangsiyan12 小时前
企业日常运维高频应用服务全解
运维·网络·云原生·容器·dns