| |
|
开发:
C++知识库
Java知识库
JavaScript
Python
PHP知识库
人工智能
区块链
大数据
移动开发
嵌入式
开发工具
数据结构与算法
开发测试
游戏开发
网络协议
系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程 数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁 |
-> 网络协议 -> C++实现单个客户端连接多个服务器(TCP) -> 正文阅读 |
|
[网络协议]C++实现单个客户端连接多个服务器(TCP) |
? ? ? ? 最近,根据项目需求,需要实现一个工业控制管理系统。该管理系统需要去连接大量的用于工业控制的下位机。下位机作为TCP服务端,开放一个固定的端口,等待管理系统的连接(下位机的这种网络模式不可更改)。管理系统需要连接并管理好这些下位机,实时与下位机进行数据通信。该项目的难点在于下位机的数量很多(少则数百,多则数千)。 ? ? ? ? ?管理系统作为TCP连接的客户端,主动去与下位机(服务端)建立连接。对于每一个下位机,?管理系统(客户端)都需要new一个socket,与服务端的建立连接,连接成功后,管理系统需要保存好这个socket,以便需要时进行通信(如果不保存这个socket,每次通信时都需要先建立TCP连接,那么实时性会大打折扣)。假设有两千个下位机,管理系统就需要维护两千个socket,那么如何维护好这么多的socket呢?对每条连接都建立一个线程?下位机的数量是个位数的情况下还算凑合,两千个线程?开什么玩笑,就算你同意计算机也不会同意的。 ? ? ? ? 如果管理系统作为服务端,开放某个TCP端口,下位机作为客户端,主动与服务端建立连接,那么,这就是传统的C/S模式,开发这种系统对于初学者也应该是小菜一碟。在传统的C/S模式下,服务端管理着大量的socket,每个socket对应着一个客户端。常见的网络模型有select模型,但这种模型管理的socket数量有限制,不超过1024个,而且在socket较多时,基于轮询机制的select模型会力不从心,这时就可以用大名鼎鼎的ICOP模型了。可是,该项目中的下位机只能作为服务端,管理系统只能作为客户端,ICOP模型还能排上用场吗?答案是:可以! ? ? ? ? 如果对ICOP的机制比较精通的话,就会发现,和完成端口绑定的socket并没有区分socket是服务端的还是客户端的,只要把一个socket绑定到完成端口上,在这个socket上投递recv操作即可接收网络数据。这就是我在研究透IOCP机制的基础上找到的思路。 ? ? ? ? 各位大侠还有什么更好的解决方案,可以给我留言。需要源码的朋友,这里不方便提供(项目太大),但我可以提供关键步骤的代码,建议深入研究一下IOCP的工作机制,否则可能无处下手。459238972@qq.com |
|
网络协议 最新文章 |
使用Easyswoole 搭建简单的Websoket服务 |
常见的数据通信方式有哪些? |
Openssl 1024bit RSA算法---公私钥获取和处 |
HTTPS协议的密钥交换流程 |
《小白WEB安全入门》03. 漏洞篇 |
HttpRunner4.x 安装与使用 |
2021-07-04 |
手写RPC学习笔记 |
K8S高可用版本部署 |
mySQL计算IP地址范围 |
|
上一篇文章 下一篇文章 查看所有文章 |
|
开发:
C++知识库
Java知识库
JavaScript
Python
PHP知识库
人工智能
区块链
大数据
移动开发
嵌入式
开发工具
数据结构与算法
开发测试
游戏开发
网络协议
系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程 数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁 |
360图书馆 购物 三丰科技 阅读网 日历 万年历 2024年12日历 | -2024/12/27 14:26:38- |
|
网站联系: qq:121756557 email:121756557@qq.com IT数码 |
数据统计 |