当前位置: 首页 > news >正文

Why Not Http?

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

socket与http之间的区别

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

选择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。也非常方便进行数据加解密。

http://www.lryc.cn/news/302784.html

相关文章:

  • 基于JAVA的停车场收费系统 开源项目
  • 在PyTorch中,如何查看深度学习模型的每一层结构?
  • 洛谷-P1478-陶陶摘苹果(升级版)(贪心)
  • 【大数据面试题】007 谈一谈 Flink 背压
  • 爬虫知识--01
  • 【Azure 架构师学习笔记】- Azure Databricks (7) --Unity Catalog(UC) 基本概念和组件
  • react【六】 React-Router 路由
  • AUTOSAR CP--chapter7从CAN网络学习Autosar通信
  • NX/UG二次开发—CAM—平面铣边界准确设置方法
  • 网络安全综合实验
  • QT-地形3D
  • C++拷贝构造函数与赋值运算符重载
  • 全球各国海外媒体发稿新闻营销推广,英美德意法俄日韩多语言
  • 将phantomjs制成docker镜像
  • 【LeetCode+JavaGuide打卡】Day20|530.二叉搜索树的最小绝对差、501.二叉搜索树中的众数、236. 二叉树的最近公共祖先
  • 【工具类】开源照片管理工具pthtoprism
  • [ linux网络 ] 网关服务器搭建,综合应用SNAT、DNAT转换,dhcp分配、dns分离解析,nfs网络共享以及ssh免密登录
  • MySQL全量备份
  • 【Linux系统化学习】动静态库 | 软硬链接
  • linux-firewalld防火墙端口转发
  • adobe软件提示This non-genuine Adobe app will be disabled soon【软件版本】
  • python coding with ChatGPT 打卡第20天| 二叉搜索树:搜索、验证、最小绝对差、众数
  • Stable Diffusion——基础模型、VAE、LORA、Embedding各个模型的介绍与使用方法
  • Python自动化部署与配置管理:Ansible与Docker
  • 《摔跤吧爸爸》19岁女星突患皮肌炎离世
  • 用结构体数组,完成宠物信息登记管理。
  • 频率主义线性回归和贝叶斯线性回归
  • 【感知算法】Dempster-Shafer理论(下)
  • 通过conda安装cudatoolikit和cudnn
  • vue中使用jsx语法