php socket 处理不过来数据流,该如何避免(好像是阻塞了)_PHP教程
php socket 处理不过来数据流,该如何避免(好像是阻塞了)
php socket 处理不过来数据流,该如何处理(好像是阻塞了)需求:php接受一个硬件往8888端口上发送数据,如果收到后,应socket_send函数返回“\xFA\x01\x01\xFF\xAA\xAA\x00\x01\x00\x00\x00\x00\x00\x01”,硬件再接收到socket_send发送的数据后,会“滴”一声,但是问题出现了,一个硬件还好,但是当多个硬件同时连接并同时发送数据时,会出现硬件不能连续的回应(即发出“滴”的声音),也就是说能连续发出“滴”声后,便不在响了,大概几秒钟后,又开始响应了,过一会又不行了,几个连接上的硬件都是这样,我已经用了非阻塞模式,还是会这样,求解决方法,下面贴出代码
-
PHP code
<!--?php error_reporting(E_ALL); set_time_limit(0); ini_set("allow_call_time_pass_reference",true); //监听端口 $PORT = 8888; //最大连接池 $MAX_USERS = 50; //创建监听端口 //$sock = socket_create_listen($PORT); $commonProtocol = getprotobyname("tcp"); $sock = socket_create(AF_INET, SOCK_STREAM, $commonProtocol); @socket_bind($sock, '192.168.1.112 @socket_listen($sock); if (!$sock) { exit(1); } //不阻塞 socket_set_nonblock($sock); $connections = array(); $input = array(); $close = array(); while (true) { //sleep(3); $readfds = array_merge($connections, array($sock)); $writefds = array(); //选择一个连接,获取读、写连接通道 if (socket_select($readfds, $writefds, $e = null, $t=60)) { foreach ($readfds as $rfd) { //如果是当前服务端的监听连接 if ($rfd == $sock) { //接受客户端连接 $newconn = socket_accept($sock); $i = (int)$newconn; $reject = ''; if (count($connections) -->= $MAX_USERS) { $reject = "Server full. Try again later.\n"; } //将当前客户端连接放如socket_select选择 $connections[$i] = $newconn; //输入的连接资源缓存容器 $writefds[$i] = $newconn; //连接不正常 if ($reject) { $close[$i] = true; } else { echo "Welcome to the PHP Chat Server!\n"; } //初始化当前连接读取内容的缓存容器 $input[$i] = ""; continue; } //客户端连接 $i = (int)$rfd; //读取 $tmp = @socket_read($rfd, 14, PHP_NORMAL_READ); if (!$tmp) { //读取不到内容 print "connection closed on socket $i\n"; close($i); continue; } $input[$i] .= $tmp; $tmp = substr($input[$i], -1); /*if ($tmp != "\r" && $tmp != "\n") { // no end of line, more data coming continue; }*/ $line = trim($input[$i]); $input[$i] = ""; echo 'Client >>'.$line."\r\n"; socket_getpeername($connections[$i],&$remoteIP,&$remotePort); echo $remoteIP."\r\n"; echo $remotePort."\r\n"; //$data=str_split($buffer); //print_r($data); $str="\xFA\x01\x01\xFF\xAA\xAA\x00\x01\x00\x00\x00\x00\x00\x01"; socket_send($connections[$i],$str,strlen($str),0); } foreach ($writefds as $wfd) { $i = (int)$wfd; $w = socket_write($wfd, "hello"); } } } function close($i) { global $connections, $input, $close; socket_shutdown($connections[$i]); socket_close($connections[$i]); unset($connections[$i]); unset($input[$i]); unset($close[$i]); } ?>
登录后复制

热AI工具

Undresser.AI Undress
人工智能驱动的应用程序,用于创建逼真的裸体照片

AI Clothes Remover
用于从照片中去除衣服的在线人工智能工具。

Undress AI Tool
免费脱衣服图片

Clothoff.io
AI脱衣机

Video Face Swap
使用我们完全免费的人工智能换脸工具轻松在任何视频中换脸!

热门文章

热工具

记事本++7.3.1
好用且免费的代码编辑器

SublimeText3汉化版
中文版,非常好用

禅工作室 13.0.1
功能强大的PHP集成开发环境

Dreamweaver CS6
视觉化网页开发工具

SublimeText3 Mac版
神级代码编辑软件(SublimeText3)

在大数据时代,数据管理和处理成为了企业发展的重要一环。而对于数据流的处理,ApacheNiFi是一种领先的开源数据流处理工具。PHP语言对于网站和应用的开发十分熟悉,那么如何将PHP和ApacheNiFi集成实现数据流管理和处理呢?一、ApacheNiFi简介ApacheNiFi是一个强大的、可视化的数据流处理工具。它可以通过可视化的方式,将数据从各

React数据流管理指南:如何优雅地处理前端数据流动引言:React是一种非常流行的前端开发框架,它提供了一种组件化的开发方式,使得前端开发更加模块化、可维护性更高。然而,在开发复杂的应用程序时,管理数据流动变得很重要。这篇文章将介绍一些React中优雅处理数据流动的方法,并演示具体的代码示例。一、单向数据流React倡导使用单向数据流来管理数据流动。单向数

Swoole和Workerman对PHP与MySQL的数据传输和数据加密的优化方法随着互联网的迅速发展,PHP作为一种常用的服务器端编程语言,广泛应用于Web开发领域。在PHP的应用中,数据传输和数据安全性一直是开发者关注的焦点。为了提高数据传输的效率和保护数据的安全性,开发者通常会使用一些优化方法。本文将重点介绍Swoole和Workerman这两个常用

随着互联网应用的不断增多,数据的处理变得越来越重要。为了更好地处理数据,提高系统的效率和可靠性,数据流模型设计成为了一种重要的方法。本文将介绍如何在Go语言中设计数据流模型,包括流管道、分组、过滤器等。流管道流管道是数据流模型的基础组成部分,可以将数据从一个处理单元传递到另一个处理单元。在Go语言中,可以使用channel作为管道,channel支持数据的异

标题:PHPStream数据流操作指南在Web开发中,数据流操作是非常常见的操作,可以用于读取文件内容、发送HTTP请求、处理网络数据等功能。PHP提供了强大的Stream功能,使得数据流操作变得更加简单和便捷。本文将介绍如何使用PHPStream实现数据流操作,并提供具体的代码示例供参考。1.基本概念在PHP中,Stream是一种抽象的数据流,可以

随着互联网应用及数据量的不断增长,对于数据处理的速度要求也日益提高。而在PHP开发领域,高性能数据流处理技术便成为了一种必备的解决方案。本文将对PHP中的高性能数据流处理技术进行介绍和分析。一、数据流处理的原理在传统的数据处理方式中,常常使用将数据缓存到内存中,再进行读写操作的方式。但是,当数据量过大时,往往会造成内存溢出等问题。而数据流处理技术则不同,它将

FlumevsKafka:哪种工具更适合您的数据流处理?概述Flume和Kafka都是流行的数据流处理工具,用于收集、聚合和传输大量实时数据。两者都具有高吞吐量、低延迟和可靠性等特点,但它们在功能、架构和适用场景方面存在一些差异。FlumeFlume是一个分布式、可靠且高可用的数据收集、聚合和传输系统,它可以将数据从各种来源收集起来,然后存储到HDFS、

如何在Java中使用网络编程函数进行网络通信和数据传输网络通信是现代计算机领域最重要的应用之一。而在Java中,我们可以使用网络编程函数来实现网络通信和数据传输。本文将介绍如何使用Java的网络编程函数,包括建立TCP和UDP连接,并提供具体的代码示例。一、使用TCP进行网络通信TCP(TransmissionControlProtocol)是一种可靠的
