[python&php 网络编程]把socket改成阻塞或非阻塞模式

php的非阻塞套接字socket 本文的需求是检测数量不确定的服务器在不在线的问题。一开始是准备网页异步调用php去检测socket连接,所以没弄过这块内容的我就上网搜了类似php异步调用socket等内容。真是~。~ 先说说搜索结果,出来最多的都是ajax,curl,fsockopen和popen等等。偶然间发现了一篇文章中提到了socket中的select函数,然后仔细看了看,才发现自己把非阻塞和异步搞混了。这个问题还可以继 阅读详情

1.python写法

import socket

def test_socket_modes():
    s = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
    s.setblocking(1)
    s.settimeout(0.5)
    s.bind(("127.0.0.1", 0))
    
    socket_address = s.getsockname()
    print "Trivial Server lauched on socket: %s" %str(socket_address)
    while(1):
        s.listen(1)
  
if __name__ == '__main__':
    test_socket_modes()

2.php写法

<?php

function test_socket_modes()
{
    $socket = socket_create(AF_INET, SOCK_STREAM, SOL_TCP);
    socket_set_block($socket);
    socket_set_option($socket, SOL_SOCKET, SO_RCVTIMEO, array('sec'=>0.5, 'usec'=>0));
    socket_bind($socket, '127.0.0.1', '8686');
    printf("Trivial Server lauched on socket: (%s)\n", '127.0.0.1, 8686');
    while(1){
        socket_listen($socket);
    }
}

test_socket_modes();

代码量差不多,php我之间bind一个端口,在shell下lsof出端口可以查到

COMMAND   PID  USER   FD   TYPE             DEVICE SIZE/OFF NODE NAME
php     15249 baidu    3u  IPv4 0x22580e0c0af2b3a9      0t0  TCP localhost:sun-as-jmxrmi (LISTEN)
COMMAND   PID USER   FD   TYPE             DEVICE SIZE/OFF NODE NAME
Python  15263 root    3u  IPv4 0x22580e0c0b43c3a9      0t0  TCP localhost:56040 (LISTEN)

转载请标注原文地址:

Python系列 之 socket模块 - 非阻塞模式 Python socket模块学习socket模块学习非阻塞模式select模块selectors模块 socket模块学习 非阻塞模式 socket的默认情况下是阻塞模式:socket.accept()方法在没有接受到连接之前不能处理已经建立连接的其他操作,以及在recv()方法或者其他接受数据的方法时候都是阻塞的,如果没有接受到数据就会一直处于阻塞状态,来等待接受数据,这种情况只有通过开启新的进程或者线程来解决来自不同客户端的连接请求或者接受数据;socket可以支持非阻塞的模式;可以使用以下两种方法来 阅读详情

相关推荐

tornado 实现 将阻塞函数 改变为非阻塞 助力并发开发

背景 python 并发最强大的地方 就是使用协程。 tornado 基于事件循环, 轮询的方式来实现并发, 在阅读本篇文章的时候 默认为你有了一定的 基础知识, 使用过yield yield from async await 并充分理解了。 django 每创建一个连接就会创建一个线程, 这样对服务器的要求比较高, 服务器的压力比较大。 tornado 充分利用协程实现并发, 使用各种...

yangxiaodong88的博客 878

php socket非阻塞,php stream_set_blocking设置非阻塞模式,php stream_set_blocking影响函数fgets()和fread()...

stream_set_blocking函数可以将资源流设置为阻塞模式或者非阻塞模式,主要影响的函数分别是fgets,fread,其他的手册没有说。在socket编程中,如果一个socket连接上了,但是不发送数据,此时使用fread或者fgets去读取数据,由于socket句柄是有效的,但是获取不到数据,fread/fgets就会阻塞等待卡在那里,一直等到超时才继续向下执行。看下面的阻塞等待dem...

weixin_42438410的博客 704

python下socket阻塞(setblocking)、超时(settimeout)探讨

本文通过实例来解说用网络通讯时,通过tcp/ip协议,接收数据时,阻塞(block),超时设置(settimeout)功能 先介绍两个函数: 1、socket.setblocking(True/False),来设置是否阻塞,True时阻塞,False不阻塞。 2、socket.settimeout(time) ,设置超时时间 测试方法: 采用网络调试助手做服务程序设置如下: 状态一:不做任何设置 编写程序 test1.py # -*- coding:utf-8 -*- imp.

szgaos的博客 8836

php socket客户端非阻塞,网络客户端与服务器并发连接非阻塞socket

首先,了解下阻塞和非阻塞:在阻塞模式下, 程序在调用接收函数时(如recv), 如果没有数据到达, 此函数会一直等待, 即当前线程会被阻塞, 直到有数据时才返回!在非阻塞模式下, 程序在调用接收函数时, 接收函数会立即返回, 调用方还可以进行其它操作, 而当有数据到达进, 操作系统会通过某些方法(如事件)来通知你!再了解下SocketServer模块中可供使用的类:BaseServer:包含服务器...

weixin_35690449的博客 394

LightGBM参数调优实战:从基础到高级技巧

本文深入探讨了LightGBM参数调优的实战技巧。文章从理解其Leaf-wise生长策略的核心逻辑出发,系统性地介绍了分层调参策略:首先调整控制模型结构的参数(如num_leaves),其次优化学习能力参数(如learning_rate),最后通过正则化与随机化参数提升泛化能力。文中还提供了从建立基线到最终微调的完整实战流程与高级避坑指南,帮助读者高效提升模型性能。

i8j9k0l1的博客 262

树莓派4B+Ubuntu22.04+思岚RPLIDAR C1激光雷达应用

树莓派+Ubuntu22.04+思岚RPLIDAR C1激光雷达简单应用

techfuture的博客 3704

php socket 无阻塞,PHP问题集锦 - PHP socket_write在非阻塞套接字的循环中只有最后写入成功...

我希望通过一个套接字将数据发送到两个不同的端点。这是为了通过WebSockets和推送服务发送消息(由一个单独的工作实例完成)。由于我的应用程序不需要来自端点的答案,所以我将套接字设置为非阻塞,以便我的应用程序快速完成请求。问题是,只完成最后一次套接字写入。第一个端点不接收数据。代码如下:foreach ($workerInstances as $workerInstance) { // $w...

weixin_34419203的博客 353

在ubuntu20.04上配置VINS_Fusion(亲测有效,一应俱全)

最近在做科研训练的时候配置了HKUST-Aerial-Robotics实验室的VINS_Fusion代码项目,经历了一些编译报错的问题,在网上查找的时候博客内容良莠不齐,且实质针对性意见不多,于是在此记录下自己配置期间遇到的一些共性问题,留作自己日后参考和大家的交流学习。

wyr1849089774的博客 8269

一直让 PHP 程序员懵逼的同步阻塞异步非阻塞,终于搞明白了

大家好,我是码农先森。 经常听到身边写 Java、Go 的朋友提到程序异步、非阻塞、线程、协程,让系统性能提高到百万、千万并发,使我甚是惊讶属实羡慕。对于常年写 PHP 的我来说,最初听到这几个词时,脑袋一直处于蒙圈状态,回过头来看着自己手上同步阻塞的 PHP 代码,心想着「异步、非阻塞、线程、协程」到底是个什么东东,这么厉害嘛。其实 PHP 中也有线程、协程,但在日常的编程中几乎不会使用,原因...

weixin_40432209的博客 405

如何用YOLOv5改进无人机小目标检测?MFFSODNet实战教程(附代码)

本文详细介绍了如何利用YOLOv5框架结合MFFSODNet网络结构优化无人机航拍图像中的小目标检测。通过引入微小目标预测头、多尺度特征提取模块(MSFEM)和双向密集特征金字塔网络(BDFPN)等核心技术,显著提升了小目标检测精度。文章提供了完整的代码实现方案,并展示了在农业监测、电力巡检等实际场景中的应用效果。

sre5engineer的博客 739

VSCode多文件C语言项目编译实战:从配置到运行

本文详细讲解了如何在VSCode中配置多文件C语言项目的编译环境。通过手把手教学,指导读者创建项目结构、编写代码,并重点深度配置task.json与launch.json文件,实现一键编译和调试所有C文件,解决常见的“undefined reference”等链接错误,提升开发效率。

g8f9d0s1a2的博客 1098

Linux下的五种I/O模型

Linux下的五种I/O模型 1)阻塞I/O(blocking I/O) 2)非阻塞I/O (nonblocking I/O) 3) I/O复用(select 和poll) (I/O multiplexing) 4)信号驱动I/O (signal driven I/O (SIGIO)) 5)异步I/O (asynchronous I/O (the POSIX aio_fu

skylark的总结 685

F5高可用HA配置详情

F5 HA详细配置

weixin_45843944的博客 3025

PHP原生socket详解

PHP原生WebSocket服务 来源 https://www.cnblogs.com/loveyoume/p/6076101.html https://blog.youkuaiyun.com/weixin_42133420/article/details/80444661 https://blog....

chuanguan1820的博客 1307

YOLOv8安防监控实战:跌倒/闯入/徘徊实时检测(附TensorRT加速+声光报警部署代码)

精准性:针对跌倒/闯入/徘徊的行为特征优化,准确率达89.3%,误报率低于5次/天;实时性:TensorRT加速到50+FPS,报警延迟<1秒,满足安防“黄金响应时间”;低成本:无需专用AI芯片,RTX 3060或Jetson Orin就能跑,硬件成本比传统方案低60%;易部署:代码全开源,提供从模型训练到硬件联动的完整流程,2天即可搭起原型系统。如果你的安防监控还在“漏报误报”“响应慢”,建议先从跌倒检测的姿态过滤改起——用100张样本测试,再集成TensorRT加速,90%能看到明显改善。

专注于Python爬虫开发,分享爬虫技巧、项目实战与反爬经验,使用Scrapy、BeautifulSoup等工具,解决数据抓取难题。 680

MIPI D-PHY IP 使用说明(一)

目录 前言 一、IP 特点 二、IP 可用性 三、IP 总览 四、IP 声明 五、IP 结构 六、IP 分流桥 模式 七、端口描述 1、PPI 接口信号 1、常规 PPI控制信号 2、发送模式 时钟通道 高速 PPI 信号 3、发送模式 时钟通道 逃逸模式PPI 信号 4、发送模式 数据通道 高速 PPI 信号 5、发送模式 数据通道 控制接口PPI 信号 6、发送模式 ...

记录所学,分享知识,结识挚友 2504

php socket非阻塞线程,组件类 - 多线程非阻塞 socket 编程 - 《RT-Thread应用笔记》 - 书栈网 · BookStack...

基于多线程的非阻塞 socket 编程本文的目的和结构本文的目的和背景随着物联网的发展,越来越多产品需要基于网络进行数据传输。在实际开发中,往往要求网络传输时不能阻塞当前线程,以致无法及时处理其他消息。在用户无法直接套用简单的 socket demo 时,RT-Thread 提供基于多线程的非阻塞 socket 编程示例,方便用户进行应用程序开发。本文的结构本文首先介绍 socket 常规使用以及...

weixin_29762229的博客 427

LinePhone3.2.7(android端最新版本) sip客户端

SIP客户端For android:LinePhone3.2.7(最新版本),官网地址:http://www.linphone.org/

socket阻塞与非阻塞,同步与异步、I/O模型

socket阻塞与非阻塞,同步与异步   作者:huangguisu       1. 概念理解        在进行网络编程时,我们常常见到同步(Sync)/异步(Async),阻塞(Block)/非阻塞(Unblock)四种调用方式:同步:       所谓同步,就是在发出一个功能调用时,在没有得到结果之前,该调用就不返回。也就是必须一件一件事做,等前一件做完了才能做下一...

xiaomin1991222的专栏 259

WINCC7.3破解文件

WINCC7.3硬件够破解文件,有需要的下载!WINCC7.3硬件够破解文件,有需要的下载!

数学建模模型总结

这是本人在两年内准备参加数学建模竞赛搜集到的模型资料,已经经过了本人的筛选和整理,希望能够对准备参加数学建模竞赛的学弟学妹们提供一些帮助!

PHP-Socket-阻塞与非阻塞,同步与异步概念的理解

原文地址:/content/6669625.html 1. 概念理解 在进行网络编程时,我们常常见到同步(Sync)/异步(Async),阻塞(Block)/非阻塞(Unblock)四种调用方式: 同步: 所谓同步,就是在发出一个功能调用时,在没有得到结果之前,该调用就不返回。也就是必须一件一件事做,等前一件做完了才能做下一件事。 例如普通B/S模式(同步):提交请求->等待

qq_30169511的博客 1365

Camera2Demo

在Camera2 的基础上进行封装,使得Camera2一堆初始化逻辑与Activity分离,降低耦合度,完成预览拍照并保存的操作

python socket 阻塞

python socket 阻塞

qq_43615820的博客 2476

python 线程函数的阻塞和非阻塞

最近刚刚接触python,在使用python的线程中遇到了一个问题,同时启动两个线程,调用的函数都是死循环,结果一个线程正常运行,另一个线程却一直阻塞在线程内部。 func1(self,func): while True: pass func2(self): while True: pass thread1= threading.Thread(target=self.func1,args=(self.callback,)).start() print("线程

c1149884598的博客 2370

盘点python socket 中recv函数的坑

1. 首先来看一下recv函数的各个参数 函数原型:int recv( SOCKET s, char *buf, int len, int flags) 功能:不论是客户还是服务器应用程序都用recv函数从TCP连接的另一端接收数据。 参数一:指定接收端套接字描述符; 参数二:指明一个缓冲区,该缓冲区用来存放recv函数接收到的数据; 参数三:指明buf的长度; 参数四 :一般置为0...

UN_spoken的博客 4万+

【Socket】Python使用非阻塞模式接收完整数据

之前我使用阻塞模式接收数据时必须使用Socket的方法设置一个超时时间,用来判断连接对象是否还是数据传入。但是这种方式有个很明显的弊端,那就是会影响整个的数据传输的效率。因为需要判断数据传输是否超时来得到数据是否传输完毕,但有时会因为网络波动导致每次接收的数据量都不一样,也就会导致数据完整性无法得到验证。影响数据接收的效率是因为需要等待方法设置的时间来判断是否超时,而短了通常会提前断开,长了又过于耗时。...

SN-Grotesque 3820

Python socket 编程中 accept 阻塞问题的一种解决方法

Python socket 编程中的 accept 阻塞问题的一种解决方法         在进行 Python socket TCP server 端编程时,需要在其运行时接收停止命令事件,停止整个服务程序。虽然这是不常见的需求,但实现起来颇有些周折,其中 accept 执行时的阻塞问题是关键所在。         一般情况下,Python Socket 的 accept 是阻塞执行的,它的阻塞能够屏蔽程序对CTRL-C的接收

luhanhua的专栏 6283

Python实现socket的非阻塞式编程

原文 阻塞模式与非阻塞模式 阻塞模式 程序碰到了一些耗时操作,无法继续向下走。 例如在socket编程中,例如在send()即发送信息过程中,可能对方已经断开,可能网络等原因导致信息传递不通畅;在客户端的connect()函数中,可能地址不可达等原因。这些情况在阻塞模式中会造成线程中断等待,导致无法进行下一步操作,等超过一个固定时间还没有完成之后会产生异常。但是这种阻塞通常用于确定的几个连接地址并...

sinat_33384251的博客 4399
上一篇: [python&php 网络编程]socket缓冲区大小设置
下一篇: [python&php 网络编程]重用socket地址
ddjohn
博客等级 码龄17年 36粉丝 135原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值