C/S与P2P

严格来讲客户端与服务器指的都是进程,N个Client客户端进程与一个或多个Server服务器进程可以组成一个C/S结构的网络,而同时既是客户端也是服务器的N个节点可以组成一个P2P网络。

CS架构中,Client向Server提出请求,Server处理请求。P2P网络中每个节点互相都可以提出请求,也都可以处理请求。

UDP在应用层实现保活/心跳

在TCP网络中,已连接的两个端点互相知道对方端点的状态,例如连接时要三次握手,正常断开时要发FIN,异常断开时可以通过保活机制发现。UDP一个重要特征是无连接,因为无连接,使用它进行广播就特别方便,不必像TCP先连接才能通讯,因为无连接,它没有保活机制,一个节点不知道其他节点的状态。

在一个在局域网场景中,可以应用UDP灵活的广播能力设计一个保活机制,各个P2P节点保存一个邻居节点列表,根据网络消息实时更新各个节点在线状态。


以上的设计在一个节点进程开始就需要随时掌握其他邻居节点当前状态的场景中是OK的,但是在一个只需要某些时间掌握邻居节点状态,所有的节点都不断的广播自身状态就有些浪费网络带宽和性能了。可以略微改进,加入一个查询邻居的消息,需要掌握邻居状态的节点广播查询消息,邻居节点在收到查询消息时回复自身状态。

在以上保活机制中,检测 上线/在线状态 与 正常断线状态 比较简单,异常断线状态的检测中需要考虑一个保活时间。在一个广播循环中,邻居节点列表中的最后更新时间如果小于一个阀值,就可以判定此节点已经异常断线。这里还要考虑UDP数据包不保证100%到达的问题,因此建议保活时间设计为广播时间间隔*n,UDP连续丢包的概率应该还是很小的,只要n不等于1即可规避此问题。邻居节点上线与下线消息因为只会发一次,丢包的可能性是有的,但是上线消息如果发生丢包,之后的在线消息还会连续广播,之前说了局域网中UDP连续丢包的可能性可以忽略不计,因此这个case退化为了只是对对方上线时间的精确度发生误判。下线消息丢包后,对邻居节点列表的保活检查会判定它为异常断线。所以就算发生上下线广播丢包也并不影响程序的正确性。因此以上的机制表面看起来很松散,鲁棒性实际上是足够的。同时,相比于TCP,这个设计是在应用层实现,可控性强,逻辑上比较简单,不需要连接,在频繁发生节点状态切换的场景下性能消耗较小。

——————————————————————
维护日志:
2017-8-22:更新了标题
2020-8-13:review

Unity网络:在局域网P2P网络中利用UDP广播实现保活/心跳相关推荐

  1. 在Unity3d项目中利用Udp进行局域网内通信

    在Unity3d项目中利用Udp进行局域网内通信 实现一个用于存储通信息的Quene using System.Collections; using System.Collections.Generi ...

  2. Python版课堂管理系统中使用UDP广播远程关闭客户端程序思路与源码

    本文代码来自于我自己使用开发的一套课堂管理系统,界面是用tkinter编写的,教师端界面如图所示: 为了防止学生关闭客户端而接收不到屏幕广播,大概3个月前为客户端代码增加了不允许关闭的辅助功能: de ...

  3. 百度超级链XChain(2)p2p网络

    1. 定义 非结构化p2p网络 结构化p2p网络:结构化p2p最普遍的实现方案是使用分布式哈希表(DHT),eg. 以太坊网络. 1.1 NAT技术 通过将局域网内的主机地址映射为互联网上的有效ip地 ...

  4. 网络知识之P2P技术全攻略

    来源:http://industry.ccidnet.com/art/1155/20030404/805663_1.html 1.什么是p2p P2P是一种技术,但更多的是一种思想,有着改变整个互联网 ...

  5. 区块链P2P网络协议演进过程

    区块链是以加密机制.储存机制.共识机制等多种技术组成的分布式系统,可以在无中心服务器的情况下实现相互信任的点对点交易功能.区块链最大的特点是去中心化和分布式,区块链共识机制使得参与节点共同为系统提供服 ...

  6. P2P网络认识与实践

     基础网络知识  认识P2P网络(peer to peer),必然要了解一些网络相关的基础知识.网络是一门深奥的专业性学科,如果要详细了解可阅读<TCP/IP详解>.<Unix网络编 ...

  7. P2P网络基础(学习笔记)

    P2P网络基础(学习笔记) 基本概述 P2P与C/S架构 P2P网络的特点 P2P网络的主要功能 P2P网络的分类 集中式 全分布式非结构化 全分布式结构化 混合式 比特币网络 P2P网络的应用 基本 ...

  8. hcip(p2p网络与虚拟专线)

    目录 网络类型 点到点网络协议 1,HDLC 2.PPP GRE,MGRE技术 网络类型 根据数据链路层所使用的协议及规则来进行划分 1.P2P网络 --- 点到点网络 2.MA网络 --- 多点接入 ...

  9. P2P网络借贷合规业务模式概述

    引子 P2P网贷平台从产生到现在一直争议不断. 一方面,网贷平台为出借人.借款人提供直接的借贷渠道,满足借款人融资,出借人投资需求,特别是国内有将近8亿人无信贷记录,这些被传统银行忽略的用户存在大量的 ...

最新文章

  1. mac terminal vim delete key
  2. python数字类型-Python数字类型及其操作
  3. CTFshow 命令执行 web36
  4. linux下xampp(apache)中配置域名访问,以及遇到的问题
  5. 成为一名优秀数据分析师的必经之路
  6. 微信开发系列之一 - 微信公众号开发的开发环境搭建
  7. 微型计算机系统包括( )几部分,微型计算机系统包括哪几个部分?
  8. 前端:前端安全编码规范
  9. 成交量与股价的关系图解
  10. MySQL多IDC部署注意事项
  11. 【数据分析】基于matlab GUI kmeans聚类分组系统【含Matlab源码 510期】
  12. 集群容错机制:failover、failfast、failback、failsafe、forking
  13. 看图工具MassiGra使用指南
  14. 修复windows系统引导
  15. bzoj1776[Usaco2010 Hol]cowpol 奶牛政坛
  16. APICloud教程
  17. 序列周期性与魔术(一)——数学里的函数周期性
  18. HTTP/HTPPS协议
  19. 什么是SAS硬盘,服务器硬盘sas和sata有什么区别
  20. 安恒信息网络空间测绘解决方案:Sumap全球网络空间超级雷达

热门文章

  1. 串口上升时间标准_国家电网公司时钟同步标准.pdf
  2. c语言设置输出字符大小_C语言中常用的几个头文件及库函数
  3. iphone字体_朋友圈换个花样字体,发个朋友圈也高级过人
  4. python asyncio future_Python中的asyncio模块中的Future和Task的区别?
  5. 备份数据库的expdp语句_银行业Oracle RAC数据库迁移经验分享
  6. vue写js代码_vue.js弹出式音乐播放器特效代码
  7. php serialize和json_encode哪个更快_学习PHP的10个技巧
  8. update怎么同时改两个字段_[NewLife.XCode]高级增删改
  9. java 增长因子_Java ArrayList的扩容因子为什么是1.5?
  10. ubuntu16.04 gcc降级到4.8