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倡導使用單向資料流來管理資料流。單向數

隨著網路應用的不斷增多,資料的處理變得越來越重要。為了更好地處理數據,提高系統的效率和可靠性,資料流模型設計成為了重要的方法。本文將介紹如何在Go語言中設計資料流模型,包括流管道、分組、篩選器等。流管道流管道是資料流模型的基礎組成部分,可以將資料從一個處理單元傳遞到另一個處理單元。在Go語言中,可以使用channel作為管道,channel支援資料的異

Swoole和Workerman對PHP與MySQL的資料傳輸和資料加密的最佳化方法隨著網路的快速發展,PHP作為一種常用的伺服器端程式語言,廣泛應用於Web開發領域。在PHP的應用中,資料傳輸和資料安全性一直是開發者關注的焦點。為了提高資料傳輸的效率和保護資料的安全性,開發者通常會使用一些最佳化方法。本文將重點放在Swoole和Workerman這兩個常用

標題:PHPStream資料流操作指南在Web開發中,資料流操作是非常常見的操作,可以用來讀取檔案內容、傳送HTTP請求、處理網路資料等功能。 PHP提供了強大的Stream功能,使得資料流操作變得更加簡單和方便。本文將介紹如何使用PHPStream實作資料流操作,並提供具體的程式碼範例供參考。 1.基本概念在PHP中,Stream是一種抽象的資料流,可以

隨著網路應用及資料量的不斷增長,對於資料處理的速度需求也日益提高。而在PHP開發領域,高效能資料流處理技術便成為了必備的解決方案。本文將對PHP中的高效能資料流處理技術進行介紹與分析。一、資料流處理的原理在傳統的資料處理方式中,常使用將資料快取到記憶體中,再進行讀寫操作的方式。但是,當資料量過大時,往往會造成記憶體溢位等問題。而資料流處理技術則不同,它將

FlumevsKafka:哪種工具更適合您的資料流處理?概述Flume和Kafka都是流行的資料流處理工具,用於收集、聚合和傳輸大量即時資料。兩者都具有高吞吐量、低延遲和可靠性等特點,但它們在功能、架構和適用場景方面存在一些差異。 FlumeFlume是一個分散式、可靠且高可用的資料收集、聚合和傳輸系統,它可以將資料從各種來源收集起來,然後儲存到HDFS、

如何在Java中使用網路程式設計函數進行網路通訊和資料傳輸網路通訊是現代電腦領域最重要的應用之一。而在Java中,我們可以使用網路程式設計函數來實現網路通訊和資料傳輸。本文將介紹如何使用Java的網頁程式設計函數,包括建立TCP和UDP連接,並提供具體的程式碼範例。一、使用TCP進行網路通訊TCP(TransmissionControlProtocol)是一種可靠的
