目錄
php socket 处理不过来数据流,该如何避免(好像是阻塞了)
首頁 後端開發 php教程 php socket 处理不过来数据流,该如何避免(好像是阻塞了)_PHP教程

php socket 处理不过来数据流,该如何避免(好像是阻塞了)_PHP教程

Jul 13, 2016 am 09:48 AM
資料流

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 &#39;Client >>&#39;.$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]);
}
?>


登入後複製

www.bkjia.comtruehttp://www.bkjia.com/PHPjc/1023580.htmlTechArticlephp socket 处理不过来数据流,该如何避免(好像是阻塞了) php socket 处理不过来数据流,该如何处理(好像是阻塞了) 需求:php接受一个硬件往8...
本網站聲明
本文內容由網友自願投稿,版權歸原作者所有。本站不承擔相應的法律責任。如發現涉嫌抄襲或侵權的內容,請聯絡admin@php.cn

熱AI工具

Undresser.AI Undress

Undresser.AI Undress

人工智慧驅動的應用程序,用於創建逼真的裸體照片

AI Clothes Remover

AI Clothes Remover

用於從照片中去除衣服的線上人工智慧工具。

Undress AI Tool

Undress AI Tool

免費脫衣圖片

Clothoff.io

Clothoff.io

AI脫衣器

Video Face Swap

Video Face Swap

使用我們完全免費的人工智慧換臉工具,輕鬆在任何影片中換臉!

熱工具

記事本++7.3.1

記事本++7.3.1

好用且免費的程式碼編輯器

SublimeText3漢化版

SublimeText3漢化版

中文版,非常好用

禪工作室 13.0.1

禪工作室 13.0.1

強大的PHP整合開發環境

Dreamweaver CS6

Dreamweaver CS6

視覺化網頁開發工具

SublimeText3 Mac版

SublimeText3 Mac版

神級程式碼編輯軟體(SublimeText3)

PHP和Apache NiFi整合實現資料流管理和處理 PHP和Apache NiFi整合實現資料流管理和處理 Jun 25, 2023 pm 12:25 PM

在大數據時代,資料管理和處理成為了企業發展的重要一環。而對於資料流的處理,ApacheNiFi是一種領先的開源資料流處理工具。 PHP語言對於網站和應用的開發十分熟悉,那麼如何將PHP和ApacheNiFi整合實現資料流管理和處理呢?一、ApacheNiFi簡介ApacheNiFi是強大的、視覺化的資料流處理工具。它可以透過視覺化的方式,將資料從各

React資料流管理指南:如何優雅地處理前端資料流動 React資料流管理指南:如何優雅地處理前端資料流動 Sep 26, 2023 pm 07:45 PM

React資料流管理指南:如何優雅地處理前端資料流引言:React是一種非常流行的前端開發框架,它提供了一種元件化的開發方式,使得前端開發更加模組化、可維護性更高。然而,在開發複雜的應用程式時,管理資料流動變得非常重要。這篇文章將介紹一些React中優雅處理資料流動的方法,並示範具體的程式碼範例。一、單向資料流React倡導使用單向資料流來管理資料流。單向數

Go語言中的資料流模型設計方法 Go語言中的資料流模型設計方法 May 31, 2023 pm 11:21 PM

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

Swoole和Workerman對PHP與MySQL的資料傳輸與資料加密的最佳化方法 Swoole和Workerman對PHP與MySQL的資料傳輸與資料加密的最佳化方法 Oct 15, 2023 pm 02:55 PM

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

如何使用 PHP Stream 實作資料流操作 如何使用 PHP Stream 實作資料流操作 Mar 27, 2024 pm 04:51 PM

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

PHP中的高效能資料流處理技術 PHP中的高效能資料流處理技術 Jun 22, 2023 pm 01:17 PM

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

Flume和Kafka:哪個工具更適合處理您的資料流? Flume和Kafka:哪個工具更適合處理您的資料流? Jan 31, 2024 pm 05:35 PM

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

如何在Java中使用網路程式設計函數進行網路通訊和資料傳輸 如何在Java中使用網路程式設計函數進行網路通訊和資料傳輸 Oct 27, 2023 pm 04:39 PM

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

See all articles