# 使用 Python 实现非阻塞式的 `recvfrom`
在网络编程中,`recvfrom` 函数通常用于从网络套接字接收数据。在某些情况下,我们可能希望该操作是非阻塞的,以避免程序的卡顿。接下来,我们将一步步学习如何让 `recvfrom` 变为非阻塞模式,并最终实现一个简单的示例。
## 流程概述
我们可以将整个过程分为几个步骤,具体如下:
| 步骤 | 描述            
                
         
            
            
            
               通过本文你将了解到以下内容:HTTP2.0和TCP存在的一些问题QUIC协议为什么选择UDPQUIC协议的重要特性HTTP3.0和QUIC协议的前景和应用效果2.HTTP2.0和HTTP3.0科技永不止步。我们都知道互联网中业务是不断迭代前进的,像HTTP这种重要的网络协议也是如此,新版本是对旧版本的扬弃。2.1 HTTP2.0和TCP的爱恨纠葛HTTP2.0是2015年            
                
         
            
            
            
            这篇博客的目的是想实现一个简单的UDP服务器程序,完成客户端与服务器端的通信。 因为涉及的小知识点比较多,所以本篇博客的篇幅较长,但是会讲的很详细。 在下一篇博客里,我会总结Linux中用socket实现TCP网络程序 1.程序的第一步是创建套接字(socket)#include<sys/socket.h>	//头文件
//创建套接字函数,socket
int socket(int d            
                
         
            
            
            
            目录答案深入说明在 epoll 中的应用总结拓展答案阻塞,事情干不完就不要回来了!非阻塞,能干多少就是多少,赶紧回来!深入说明// 将内核接收缓冲区中的数据 copy 到应用层中用户的 buffer 中。
int recv(int sockfd, void *buf, size_t len, int flag); 
// 将应用层中用户的 buffer 中的数据 copy 到内核发送缓冲区中。            
                
                    
                        
                                                            
                                                                        
                                                                                        转载
                                                                                    
                            2024-07-07 21:54:28
                            
                                68阅读
                            
                                                                             
                 
                
                             
         
            
            
            
            ❝ 摘要:更好的理解 
  同步/ 
  异步, 
  阻塞/ 
  非阻塞的概念和机制。 
   ❞ 
 一、同步与异步同步/异步, 它们是消息的通知机制。1、概念解释同步
   ❝ 所谓同步,就是在发出一个功能调用时,在没有得到结果之前,该调用就不返回。 
   ❞ 
 最常见的例子就是 SendMessage。该函数发送一个消息给某个窗口,在对方处理完消息之前,这个函数不返回。当对方            
                
         
            
            
            
            近期,在做网络通信时,需要开发出一个应用程序来随时更改转发的目标地址,并同时要一直接收别的主机发来的命令从而进行一系列操作。由于之前没有做过windows系统下的窗口程序开发,我开始一点一点学习怎么创建窗口,当应用界面大概成功的时候,出现了一个问题。就是我需要不断地去询问要不要改地址,有没有接收到新的命令。然而当我觉得只要把两个功能放在同一个循环中就可以实现时,却发现,两种功能有种互斥的感觉。当接            
                
                    
                        
                                                            
                                                                        
                                                                                        转载
                                                                                    
                            2024-03-27 14:00:04
                            
                                137阅读
                            
                                                                             
                 
                
                                
                     
                                    
                             
         
            
            
            
            本篇文章讲给大家带来有关 阻塞式队列 的有关知识阻塞队列什么是阻塞式队列生产者消费者模型标准库中的阻塞队列阻塞队列模拟实现什么是阻塞式队列阻塞队列是一种特殊的队列. 也遵守 "先进先出" 的原则. 阻塞队列是一种线程安全的数据结构, 并且具有以下特性:当队列满的时候, 继续入队列就会阻塞, 直到有其他线程从队列中取走元素.当队列空的时候, 继续出队列也会阻塞, 直到有其他线程往队列中插入元素阻塞队            
                
         
            
            
            
            阻塞与非阻塞阻塞和非阻塞是指当进程访问的数据如果尚未就绪,进程是否需要等待,简单说这相当于函数内部的实现区别,也就是未就绪时是直接返回还是等待就绪;所谓阻塞方式block,顾名思义,就是进程或是线程执行到这些函数时必须等待某个事件的发生,如果事件没有发生,进程或线程就被阻塞,函数不能立即返回。例如socket编程中connect、accept、recv、recvfrom这样的阻塞程序。再如绝大多数            
                
         
            
            
            
            Windows Sockets在阻塞和非阻塞两种模式下执行I/O操作,其中,以socket()、WSASocket()函数创建的套接字默认都是阻塞套接字。在阻塞模式下,在I/O操作完成前,执行的操作函数将一直等候而不会立即返回,该函数所在的线程会阻塞在这里。相反,在非阻塞模式下,套接字函数会立即返回,而不管I/O操作是否完成,该函数所在的线程会继续运行。例如,在调用recv函数时,发生在内核中等待            
                
         
            
            
            
            阻塞I/O模型:        简介:进程会一直阻塞,直到数据拷贝 完成       应用程序调用一个IO函数,导致应用程序阻塞,等待数据准备好。 如果数据没有准备好,一直等待….数据准备好了,从内核拷贝到用户空间,IO函数返回成功指示。 阻塞I/O模型图:在            
                
                    
                        
                                                            
                                                                        
                                                                                        转载
                                                                                    
                            2024-03-21 14:38:51
                            
                                258阅读
                            
                                                                             
                 
                
                                
                     
                                    
                             
         
            
            
            
            可能阻塞的套接字调用输入操作。包括read,readv,recv,recvfrom和recvmsg共5个函数。如果某个进程对一个阻塞的TCP套接字(默认设置)调用这些输入函数之一,而且该套接字的接收缓冲区中没有数据可读,该进程将被投入睡眠,直到有一些数据到达。既然TCP是字节流协议,该进程的唤醒就是只要有一些数据到达,这些数据既可能是单个字节,也可以是一个完整的TCP分节中的数据。如果想要等到某个            
                
                    
                        
                                                            
                                                                        
                                                                                        转载
                                                                                    
                            2024-07-04 17:08:17
                            
                                162阅读
                            
                                                                             
                 
                
                             
         
            
            
            
            同步(synchronous) IO和异步(asynchronous) IO,阻塞(blocking) IO和非阻塞(non-blocking)IO分别是什么,到底有什么区别?这个问题其实不同的人给出的答案都可能不同,比如wiki,就认为asynchronous IO和non-blocking IO是一个东西。这其实是因为不同的人的知识背景不同,并且在讨论这个问题的时候上下文(con            
                
                    
                        
                                                            
                                                                        
                                                                                        转载
                                                                                    
                            2024-07-07 21:26:37
                            
                                87阅读
                            
                                                                             
                 
                
                                
                     
                                    
                             
         
            
            
            
            SOCKET       对于一个socket 是阻塞模式还是非阻塞模式的处理方法:: 
       方法:fcntl 设置;                       
                
                    
                        
                                                            
                                                                        
                                                                                        转载
                                                                                    
                            2024-03-05 13:36:08
                            
                                135阅读
                            
                                                                             
                 
                
                             
         
            
            
            
            下面范例是一个关于非阻塞模式下的SOCKET设定处理---select模式。             使用的是UDP协议。             Client02首先启动,将本机的1207端口进行SOCKET绑定,并将该SOCKET模式设定为非阻塞模式,        此模式下不可直接调用recvfrom。             理由:         阻塞模式下,如            
                
                    
                        
                                                            
                                                                        
                                                                                        转载
                                                                                    
                            2024-05-24 22:35:49
                            
                                219阅读
                            
                                                                             
                 
                
                             
         
            
            
            
            0、承上   进程:    计算机里最小的资源分配单位;    数据隔离, 利用多核,数据不安全。   线程:    计算机中最小的CPU调度单位;    数据共享,GIL锁,数据不安全.   协程:    线程的一部分,是有用户来调度的;    数据共享,数据安全.   异步:  同时做不止一件事情.   同步:  事情一件接            
                
                    
                        
                                                            
                                                                        
                                                                                        转载
                                                                                    
                            2023-06-16 20:14:02
                            
                                164阅读
                            
                                                                             
                 
                
                                
                     
                                    
                             
         
            
            
            
            # 如何实现Python UDP recvfrom阻塞
## 简介
在网络编程中,UDP通信是一种非常常用的方式。而在Python中,我们可以使用socket模块来进行UDP通信。UDP通信中的recvfrom函数可以用来接收数据,但默认情况下是非阻塞的,即如果没有数据到达,recvfrom函数会立即返回一个空值。如果我们希望recvfrom函数变成阻塞模式,等待数据到达再返回,就需要进行一些设            
                
                    
                        
                                                            
                                                                        
                                                                                        原创
                                                                                    
                            2024-06-12 06:44:17
                            
                                83阅读
                            
                                                                             
                 
                
                             
         
            
            
            
            套接字的非阻塞模式是指套接字在执行操作时,调用的函数不管操作是否完成都会立即返回的工作模式。把套接字设置为非阻塞模式,就是告诉系统内核:在调用Windows Sockets API函数时,不要让线程睡眠,而应该让函数立即返回。在返回时,该函数返回一个错误码。一个非阻塞模式的套接字多次调用recv()函数的过程如下:前三次调用recv()时,内核数据还没有准备好。因此,该函数立即返回WSAWOULD            
                
                    
                        
                                                            
                                                                        
                                                                                        转载
                                                                                    
                            2024-10-25 11:27:47
                            
                                116阅读
                            
                                                                             
                 
                
                                
                     
                                    
                             
         
            
            
            
            摘要:更好的理解同步/异步,阻塞/非阻塞的概念和机制。一、同步与异步同步/异步, 它们是消息的通知机制。1、概念解释同步所谓同步,就是在发出一个功能调用时,在没有得到结果之前,该调用就不返回。最常见的例子就是SendMessage。该函数发送一个消息给某个窗口,在对方处理完消息之前,这个函数不返回。当对方处理完毕以后,该函数才把消息处理函数所返回的值返回给调用者。我们常见的方法的调用大部分是同步,            
                
         
            
            
            
                   本文为翻译作品,若您具备一定的英语阅读水平,建议阅读原文。此文所需阅读时间,预计10分钟。    Asynchronous programming. Blocking I/O and non-blocking I/Oluminousmen.com 
             这是关于异步编程的系列文章的第一篇文章。整个系列尝试回答一个简单的问题:“什么是异步?”。(注:我不觉得简单啊            
                
         
            
            
            
               1.connect函数响应中断返回后仍然回到函数的调用。        实践证明,对于一个非阻塞的socket,如果在调用connect函数时,如果发生中断,这函数响应中断,但当中断返回时,继续connect函数的调用,直到connect超时失败或接收到错误ICMP包或连接成功               
                
                    
                        
                                                            
                                                                        
                                                                                        转载
                                                                                    
                            2024-07-25 21:17:34
                            
                                61阅读