网络编程

Linux网络编程 - 子线程使用poll处理连接 I/O事件(高并发高性能进阶篇)

流过昼夜 提交于 2020-03-07 10:18:07
这一篇我们就将 acceptor 上的连接建立事件和已建立连接的 I/O 事件分离,形成所谓的 主 - 从 reactor 模式 。 主 - 从 reactor 模式 主 - 从这个模式的核心思想是,主反应堆线程只负责分发 Acceptor 连接建立,已连接套接字上的 I/O 事件交给 sub-reactor 负责分发。其中 sub-reactor 的数量,可以根据 CPU 的核数来灵活设置 。 多个反应堆线程同时在工作,这大大增强了 I/O 分发处理的效率,并且同一个套接字事件分发只会出现在一个反应堆线程中,这会大大减少并发处理的锁开销。 来解释一下这张图,我们的 主反应堆线程一直在感知连接建立的事件 ,如果有连接成功建立,主反应堆线程 通过 accept 方法获取已连接套接字 ,接下来会 按照一定的算法 选取一个从反应堆线程,并 把已连接套接字加入到选择好的从反应堆线程中 。 主反应堆线程唯一的工作,就是调用 accept 获取已连接套接字,以及将已连接套接字加入到从反应堆线程中。不过,这里还有一个小问题,主反应堆线程和从反应堆线程,是 两个不同的线程,如何把已连接套接字加入到另外一个线程中呢 ?这是高性能网络程序框架要解决的问题,在后面,将会给出这个问题的答案。 主 - 从 reactor+worker threads 模式 如果说主 - 从 reactor 模式解决了 I

muduo网络库的学习

寵の児 提交于 2020-03-07 03:10:36
muduo是由陈硕开发的一个Linux多线程网络库,采用了很多新的Linux特性,项目代码量不到5000行,性能也不错。 是难得的一个既能用来学习,也可以在实际生产环境中使用的网络库。地址 https://github.com/chenshuo/muduo 相关介绍可以见 https://www.cnblogs.com/CodeComposer/p/4719783.html 由于此网络库只支持Linux,不支持windows,导致使用起来有点麻烦。 1.建议下载 windows移植版进行学习,地址: https://github.com/kevin-gjm/muduo-win ,用vs跑起来,加上断点真正跑一跑,就很容易明白这里面几个类的相互关系。仅仅看源码对于初学者还是有点困难。 2.先搞几个小例子跑一跑,再试试增加点feature,比如服务器监听多个端口,实现SSL等等,在这些实践中能够更好地加深对此的理解 。 3.作者本人出的书《linux多线程服务端编程》可以说是介绍这个库的很好的资料。 来源: CSDN 作者: 阿龙哥哥 链接: https://blog.csdn.net/v6543210/article/details/104698172

Linux网络编程视频 百度网盘

為{幸葍}努か 提交于 2020-03-06 23:36:13
Linux网络编程(总共41集) 讲解Linux网络编程知识,分以下四个篇章。 Linux网络编程之TCP/IP基础篇 Linux网络编程之socket编程篇 Linux网络编程之进程间通信篇 Linux网络编程之线程篇 Linux网络编程之TCP/IP基础篇 01TCPIP基础(一) ISO/OSI参考模型 TCP/IP四层模型 基本概念(对等通信、封装、分用、端口) 02TCPIP基础(二) 最大传输单元(MTU)/路径MTU 以太网帧格式 ICMP ARP RARP 03TCPIP基础(三) IP数据报格式 网际校验和 路由 04TCPIP基础(四) TCP特点 TCP报文格式 连接建立三次握手 连接终止四次握手 TCP如何保证可靠性 05TCPIP基础(五) 滑动窗口协议 UDP特点 UDP报文格式 Linux网络编程之socket编程篇 06socket编程(一) 什么是socket IPv4套接口地址结构 网络字节序 字节序转换函数 地址转换函数 套接字类型 07socket编程(二) TCP客户/服务器模型 回射客户/服务器 socket、bind、listen、accept、connect 08socket编程(三) SO_REUSE AD DR 处理多客户连接(process-per-conection) 点对点聊天程序实现 09socket编程(四)

Qt 网络编程3 ftp1 使用QNetworkAccessManager

独自空忆成欢 提交于 2020-03-06 09:04:30
FTP(File transfer protocol ,文件传输协议)是一个主要用于浏览远程目录和传输文件的协议。FTP使用两个网络连接,一个用来发送命令,一个用来输出数据。FTP协议有一个状态,并且需要客户端在传输文件之前发送一些命令。FTP客户端建立一个连接,并在整个会话期间一直保持打开。在每个会话期间,可以发生多个传输。 在Qt5中编写FTP应用时,需要使用QNetworkAccessManager等网络访问接口类。实现方式与前面讲到的HTTP应用十分相似,只需在QUrl对象中设置好主机地址、用户名和密码等,然后使用get()、put()等函数完成文件的获取和上传。 myftp.pro,添加network模块 QT += network mainwindow.h #ifndef MAINWINDOW_H #define MAINWINDOW_H #include <QMainWindow> #include <QUrl> class QNetworkReply; class QNetworkAccessManager; class QFile; namespace Ui { class MainWindow; } class MainWindow : public QMainWindow { Q_OBJECT public: explicit MainWindow

java网络编程下

做~自己de王妃 提交于 2020-03-06 03:32:29
发送端 import java . io . IOException ; import java . net . DatagramPacket ; import java . net . DatagramSocket ; import java . net . InetAddress ; /* 流程: 1. 创建UDP服务器对应的发送端Socket 2. 准备对应数据包,需要带有指定数据 3. 发送数据 send 4. 关闭UDP发送端 */ public class SenderDemo1 { public static void main ( String [ ] args ) throws IOException { System . out . println ( "发送端启动" ) ; // 创建对应的Socket DatagramSocket socket = new DatagramSocket ( ) ; // 准备数据包 byte [ ] bytes = "今天中午吃蒸羊羔..." . getBytes ( ) ; DatagramPacket packet = new DatagramPacket ( bytes , // 字节数组数据 bytes . length , // 字节数组数据长度 InetAddress . getLocalHost ( ) , /

Python 网络编程之 TCP 与 UDP

血红的双手。 提交于 2020-03-05 23:35:22
Socket(套接字) 介绍 UDP 和 TCP 协议之前,先熟悉下 socket 的基本概念。 基本概念 Socket 是通信的基石,是支持 TCP/IP 协议的网络通信的基本操作单元,在网络通信过程中端点的一种抽象表示。网络中使用 Socket 传输数据是一种特殊的网络 I/O。 工作模式 打开open -> 读写write/read -> 关闭close 五种信息 socket 包括了数据传输必须的五元组,分别为源IP、源端口、目的IP、目的端口和协议号 通信机制 基于流(stream)或者基于数据报(datagram) python 中使用 import socket socket.socket(...) UDP UDP(User Datagram Protocol) 用户数据报协议,是一种面 向无连接 的协议,提供简单不可靠的信息传输服务,发送后不会确认信息是否到达。 UDP 通信模型中,在通信开始之前,不需要建立相关的链接,只需要发送数据即可,类似于生活中"写信"。 使用 socket 使用 UDP 的收发数据,先看原理图 客户端代码实现 # 客户端 发送数据 # 1.创建udp套接字 udp_socket = socket.socket(socket.AF_INET, socket.SOCK_DGRAM) while True: send_data = input(

几种网络服务器模型的介绍与比较

五迷三道 提交于 2020-03-05 16:52:59
原文链接 前言 事件驱动为广大的程序员所熟悉,其最为人津津乐道的是在图形化界面编程中的应用;事实上,在网络编程中事件驱动也被广泛使用,并大规模部署在高连接数高吞吐量的服务器程序中,如 http 服务器程序、ftp 服务器程序等。相比于传统的网络编程方式,事件驱动能够极大的降低资源占用,增大服务接待能力,并提高网络传输效率。 关于本文提及的服务器模型,搜索网络可以查阅到很多的实现代码,所以,本文将不拘泥于源代码的陈列与分析,而侧重模型的介绍和比较。使用 libev 事件驱动库的服务器模型将给出实现代码。 本文涉及到线程 / 时间图例,只为表明线程在各个 IO 上确实存在阻塞时延,但并不保证时延比例的正确性和 IO 执行先后的正确性;另外,本文所提及到的接口也只是笔者熟悉的 Unix/Linux 接口,并未推荐 Windows 接口,读者可以自行查阅对应的 Windows 接口。 阻塞型的网络编程接口 几乎所有的程序员第一次接触到的网络编程都是从 listen()、send()、recv() 等接口开始的。使用这些接口可以很方便的构建服务器 / 客户机的模型。 我们假设希望建立一个简单的服务器程序,实现向单个客户机提供类似于“一问一答”的内容服务。 图 1. 简单的一问一答的服务器 / 客户机模型 我们注意到,大部分的 socket 接口都是阻塞型的。所谓阻塞型接口是指系统调用(一般是

网络编程py

徘徊边缘 提交于 2020-03-05 15:13:10
概念 day27 ​ 网络架构 ​ C/S :qq 微信 浏览器 英雄联盟 穿越火线 王者荣耀 安装 ​ C:client 客户端 ​ S:server 服务端 ​ B/S :百度 淘宝 码云 只要在浏览器输入网址就可以直接使用了 ​ B:browser 浏览器 ​ S:server 服务端 ​ B/S更好: 更节省资源 不用更新 不依赖环境 ​ 统一了所有web程序的入口 ​ C/S架构: 安全性 程序比较庞大 ​ 移动端 ​ app ​ 微信小程序 : 统一了所有web程序的入口 ​ 支付宝 : 统一了所有和钱相关的事儿 ​ mac ​ 是一个物理地址 ​ 唯一的标识你的网络设备 ​ ip 地址 ​ 是一个逻辑地址 ​ 是可以根据你的位置变化发生改变的 ​ 能够在广域网中快速的定位你 ​ ipv4地址: ​ 4为点分十进制 ​ 0.0.0.0-255.255.255.255 ​ 2**32 ​ 公网和内网: ​ 公网 0.0.0.0-255.255.255.255(不包含保留字段的ip) 你能够在任意一 个地方去访问的ip地址 ​ 内网 所有的内网ip都要使用保留字段 只能在一个区域内使用,出了 这个区域就用不了了 192.168.0.0 - 192.168.255.255 10.0.0.0 - 10.255.255.255 172.16.0.0 - 172.32.255

BIO的一点理解

妖精的绣舞 提交于 2020-03-05 15:07:45
随着学习的深入,我们会越发感慨到网络编程的重要性,要想了解网络编程,我们需要了解下Java里的BIO和NIO,只有了解了BIO和NIO我们才能了解netty,我们才会真正的对网络编程有一个全新的认识,所以我呢今天从BIO说起,让大家真正的理解什么是BIO,大家都说阻塞,那么到底阻塞在哪里,为什么会发生阻塞呢,只有真正的做到知其然,才能知其所以然。 看一下服务端代码 看一下客户端代码 来源: CSDN 作者: wanglei727 链接: https://blog.csdn.net/addccc/article/details/104672921

python16_day07【Socket网络编程】

匆匆过客 提交于 2020-03-05 02:45:41
/*--> */ /*--> */ 一、简介   1.理解C/S,B/S   2.IOS七层模型(http://www.cnblogs.com/linhaifeng/articles/5937962.html)    二、什么是Socket   我们看看Socket的位置在什么地方?   Socket是应用层与 TCP/IP协议族通信的中间软件抽象层,它是一组接口。在设计模式中, Socket其实就是一个门面模式,它把复杂的 TCP/IP协议族隐藏在 Socket接口后面,对用户来说,一组简单的接口就是全部,让 Socket去组织数据,以符合指定的协议。 所以,我们无需深入理解tcp/udp协议,socket已经为我们封装好了,我们只需要遵循socket的规定去编程,写出的程序自然就是遵循tcp/udp标准的。 三、Socket工作流程   先从服务器端说起。服务器端先初始化 Socket,然后与端口绑定 (bind),对端口进行监听 (listen),调用 accept阻塞,等待客户端连接。在这时如果有个客户端初始化一个 Socket,然后连接服务器 (connect),如果连接成功,这时客户端与服务器端的连接就建立了。客户端发送数据请求,服务器端接收请求并处理请求,然后把回应数据发送给客户端,客户端读取数据,最后关闭连接,一次交互结束 1