[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

Dr_can Kalman Filter学习笔记(一)

本文是在b站Dr_can的卡尔曼滤波课程学习过程中的学习笔记

苏大侠的博客 1051

datart 二开环境搭建

下载源码, 地址: https://github.com/running-elephant/datart, dev 分支; 解压后使用 idea 打开; 服务端: 3.1 安装依赖, idea会自动安装; 3.2 修改配置文件 /config/application.yml 3.3 创建数据库,并将bin/datart.sql导入到数据库中 3.4 入口: /server/src/main/java/datart/DatartServerApplication.java [外链图片转存失败,源站可能有防.

又是再见? 6133

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

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

weixin_34419203的博客 353

Cgroup对进程所占用的CPU与内存资源同时进行限制的测试

测试环境:Ubuntu。处理器数量:1CPU。内存大小:2048MB。 以下是测试程序mem_cpu_test.c的代码。 将mem_cpu_test.c编译为可以运行的程序mem_cpu_test。 运行程序,并用top命令查看mem_cpu_test所占用的系统资源情况,可以看到,mem_cpu_test使用了50%左右的内存资源,也就是1000MB左右,并占用了接近全部的CPU资源。 关闭以上的程序后,在Cgroup子系统memory和cpu下分别创建进程组test1和test2。 并设置tes

qq_44998067的博客 1154

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

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

weixin_40432209的博客 405

智能车新手必看:如何用PID和差速转弯让小车跑得更稳(附代码示例)

本文详细介绍了智能车控制系统中PID算法和差速转弯的实现方法,包括位置式与增量式PID的选择、参数整定技巧以及编码器反馈的关键作用。通过代码示例和实战经验,帮助新手快速掌握智能车稳定行驶的核心技术,提升赛道表现。

mmm90的博客 122

【ubuntu24.04】auto remove后,重启,kernel panic ,please reboot your computer vfs unable to mount root fs

Ubuntu 24.04系统在运行auto remove后出现内核恐慌(kernel panic)无法启动,显示"VFS: unable to mount root fs"错误。该问题是由于当前内核被清除导致系统无法挂载根分区。解决步骤包括:1)尝试用GRUB菜单中的旧内核启动;2)在GRUB中临时编辑启动参数;3)使用Ubuntu启动盘进行chroot修复;4)使用Boot-Repair工具一键修复。成功启动后,需要重新安装linux-generic等元包,重建initramfs并更新

突围 1215

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

国科大学习资料--模式识别与机器学习(黄庆明)--期末复习题2(含答案)

国科大学习资料–模式识别与机器学习(黄庆明)–期末复习题2(含答案) 国科大学习资料–模式识别与机器学习(黄庆明)–期末复习题2(含答案) 国科大学习资料–模式识别与机器学习(黄庆明)–期末复习题2(含答案) ...

无名何许人的博客 1万+

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

【Python_PySide6学习笔记(二十四)】菜单栏QMenuBar类的基本用法

此篇文章中介绍 PySide6 中 QMenuBar 类的基本用法,包括"创建菜单栏"、"创建一级菜单"、"创建二级菜单"等,会持续更新,有需要的读者可以点赞收藏,也欢迎在评论区进行讨论。

禾戊之昂的博客 1625

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

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

weixin_29762229的博客 427

IEM模型,地表粗糙度模拟

利用微波反演土壤水分时候,利用IEM模型可以实现对随机地表的模拟

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

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

xiaomin1991222的专栏 259

NTscan扫描工具

ntscan是一个扫描器,可以扫描没有密码和弱密码的共享,先到配置文件中填写猜测的用户名和密码,扫描过程中右侧出现的是扫描日志。

efm32 入门.pdf

本PDF共计22页,介绍的是操作驱动API,下载与否自己斟酌。

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

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

qq_30169511的博客 1365

visio安装包

Microsoft Office Visio 是一款专业的制图软件。利用经过更新的形状、协作工具和数据链接图表,创建专业级图表以简化复杂的信息。

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、付费专栏及课程。

余额充值