Jadual Kandungan
php socket 处理不过来数据流,该如何避免(好像是阻塞了)
Rumah pembangunan bahagian belakang tutorial php php socket 处理不过来数据流,该如何避免(好像是阻塞了)_PHP教程

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

Jul 13, 2016 am 09:48 AM
aliran data

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]);
}
?>


Salin selepas log masuk

www.bkjia.comtruehttp://www.bkjia.com/PHPjc/1023580.htmlTechArticlephp socket 处理不过来数据流,该如何避免(好像是阻塞了) php socket 处理不过来数据流,该如何处理(好像是阻塞了) 需求:php接受一个硬件往8...
Kenyataan Laman Web ini
Kandungan artikel ini disumbangkan secara sukarela oleh netizen, dan hak cipta adalah milik pengarang asal. Laman web ini tidak memikul tanggungjawab undang-undang yang sepadan. Jika anda menemui sebarang kandungan yang disyaki plagiarisme atau pelanggaran, sila hubungi admin@php.cn

Alat AI Hot

Undresser.AI Undress

Undresser.AI Undress

Apl berkuasa AI untuk mencipta foto bogel yang realistik

AI Clothes Remover

AI Clothes Remover

Alat AI dalam talian untuk mengeluarkan pakaian daripada foto.

Undress AI Tool

Undress AI Tool

Gambar buka pakaian secara percuma

Clothoff.io

Clothoff.io

Penyingkiran pakaian AI

AI Hentai Generator

AI Hentai Generator

Menjana ai hentai secara percuma.

Artikel Panas

R.E.P.O. Kristal tenaga dijelaskan dan apa yang mereka lakukan (kristal kuning)
3 minggu yang lalu By 尊渡假赌尊渡假赌尊渡假赌
R.E.P.O. Tetapan grafik terbaik
3 minggu yang lalu By 尊渡假赌尊渡假赌尊渡假赌
R.E.P.O. Cara Memperbaiki Audio Jika anda tidak dapat mendengar sesiapa
3 minggu yang lalu By 尊渡假赌尊渡假赌尊渡假赌
WWE 2K25: Cara Membuka Segala -galanya Di Myrise
4 minggu yang lalu By 尊渡假赌尊渡假赌尊渡假赌

Alat panas

Notepad++7.3.1

Notepad++7.3.1

Editor kod yang mudah digunakan dan percuma

SublimeText3 versi Cina

SublimeText3 versi Cina

Versi Cina, sangat mudah digunakan

Hantar Studio 13.0.1

Hantar Studio 13.0.1

Persekitaran pembangunan bersepadu PHP yang berkuasa

Dreamweaver CS6

Dreamweaver CS6

Alat pembangunan web visual

SublimeText3 versi Mac

SublimeText3 versi Mac

Perisian penyuntingan kod peringkat Tuhan (SublimeText3)

Penyepaduan PHP dan Apache NiFi untuk pengurusan dan pemprosesan aliran data Penyepaduan PHP dan Apache NiFi untuk pengurusan dan pemprosesan aliran data Jun 25, 2023 pm 12:25 PM

Dalam era data besar, pengurusan dan pemprosesan data telah menjadi bahagian penting dalam pembangunan perusahaan. Untuk pemprosesan strim data, ApacheNiFi ialah alat pemprosesan strim data sumber terbuka terkemuka. Bahasa PHP sangat biasa dengan pembangunan laman web dan aplikasi, jadi bagaimana untuk mengintegrasikan PHP dan Apache NiFi untuk mencapai pengurusan dan pemprosesan aliran data? 1. Pengenalan kepada ApacheNiFi ApacheNiFi ialah alat pemprosesan aliran data visual yang berkuasa. Ia boleh menggambarkan data daripada pelbagai

Kaedah reka bentuk model aliran data dalam bahasa Go Kaedah reka bentuk model aliran data dalam bahasa Go May 31, 2023 pm 11:21 PM

Dengan peningkatan bilangan aplikasi Internet, pemprosesan data menjadi semakin penting. Untuk memproses data dengan lebih baik dan meningkatkan kecekapan dan kebolehpercayaan sistem, reka bentuk model aliran data telah menjadi kaedah yang penting. Artikel ini akan memperkenalkan cara mereka bentuk model aliran data dalam bahasa Go, termasuk saluran paip aliran, pengumpulan, penapis, dsb. Paip Aliran Paip aliran ialah komponen asas model aliran data dan boleh menghantar data dari satu unit pemprosesan ke unit pemprosesan yang lain. Dalam bahasa Go, anda boleh menggunakan saluran sebagai saluran paip dan saluran menyokong kepelbagaian data.

Kaedah pengoptimuman Swoole dan Workerman untuk penghantaran data dan penyulitan data antara PHP dan MySQL Kaedah pengoptimuman Swoole dan Workerman untuk penghantaran data dan penyulitan data antara PHP dan MySQL Oct 15, 2023 pm 02:55 PM

Kaedah pengoptimuman Swoole dan Workerman untuk penghantaran data dan penyulitan data antara PHP dan MySQL Dengan perkembangan pesat Internet, PHP, sebagai bahasa pengaturcaraan bahagian pelayan yang biasa digunakan, digunakan secara meluas dalam bidang pembangunan Web. Dalam aplikasi PHP, penghantaran data dan keselamatan data sentiasa menjadi tumpuan pembangun. Untuk meningkatkan kecekapan penghantaran data dan melindungi keselamatan data, pembangun biasanya menggunakan beberapa kaedah pengoptimuman. Artikel ini akan memfokuskan pada Swoole dan Workerman, dua yang biasa digunakan

Panduan Pengurusan Aliran Data React: Cara mengendalikan aliran data bahagian hadapan dengan anggun Panduan Pengurusan Aliran Data React: Cara mengendalikan aliran data bahagian hadapan dengan anggun Sep 26, 2023 pm 07:45 PM

Panduan Pengurusan Aliran Data React: Cara mengendalikan aliran data bahagian hadapan dengan anggun Pengenalan: React ialah rangka kerja pembangunan bahagian hadapan yang sangat popular Ia menyediakan kaedah pembangunan berasaskan komponen, menjadikan pembangunan bahagian hadapan lebih modular dan boleh diselenggara. Walau bagaimanapun, apabila membangunkan aplikasi yang kompleks, mengurus aliran data menjadi penting. Artikel ini akan memperkenalkan beberapa kaedah mengendalikan aliran data secara elegan dalam React dan menunjukkan contoh kod tertentu. 1. Aliran data sehala React menyokong penggunaan aliran data sehala untuk mengurus aliran data. nombor sehala

Cara menggunakan PHP Stream untuk melaksanakan operasi aliran data Cara menggunakan PHP Stream untuk melaksanakan operasi aliran data Mar 27, 2024 pm 04:51 PM

Tajuk: Panduan Operasi Aliran Data PHPStream Dalam pembangunan Web, operasi aliran data adalah operasi yang sangat biasa dan boleh digunakan untuk membaca kandungan fail, menghantar permintaan HTTP, memproses data rangkaian dan fungsi lain. PHP menyediakan fungsi Strim yang berkuasa, menjadikan operasi aliran data lebih mudah dan lebih mudah. Artikel ini akan memperkenalkan cara menggunakan PHPStream untuk melaksanakan operasi aliran data dan menyediakan contoh kod khusus untuk rujukan. 1. Konsep asas Dalam PHP, Stream ialah aliran data abstrak yang boleh

Teknologi pemprosesan aliran data berprestasi tinggi dalam PHP Teknologi pemprosesan aliran data berprestasi tinggi dalam PHP Jun 22, 2023 pm 01:17 PM

Dengan pertumbuhan berterusan aplikasi Internet dan volum data, keperluan kelajuan untuk pemprosesan data juga meningkat. Dalam bidang pembangunan PHP, teknologi pemprosesan aliran data berprestasi tinggi telah menjadi penyelesaian yang diperlukan. Artikel ini akan memperkenalkan dan menganalisis teknologi pemprosesan aliran data berprestasi tinggi dalam PHP. 1. Prinsip pemprosesan aliran data Dalam kaedah pemprosesan data tradisional, kaedah caching data ke dalam ingatan dan kemudian melakukan operasi baca dan tulis sering digunakan. Walau bagaimanapun, apabila jumlah data terlalu besar, ia sering menyebabkan masalah seperti limpahan memori. Teknologi pemprosesan aliran data adalah berbeza, ia akan

Flume vs. Kafka: Alat manakah yang lebih baik untuk mengendalikan aliran data anda? Flume vs. Kafka: Alat manakah yang lebih baik untuk mengendalikan aliran data anda? Jan 31, 2024 pm 05:35 PM

FlumevsKafka: Alat manakah yang lebih baik untuk pemprosesan aliran data anda? Gambaran Keseluruhan Flume dan Kafka ialah kedua-dua alat pemprosesan aliran data yang popular untuk mengumpul, mengagregat dan menghantar sejumlah besar data masa nyata. Kedua-duanya mempunyai ciri daya pemprosesan tinggi, kependaman rendah dan kebolehpercayaan, tetapi mereka mempunyai beberapa perbezaan dalam kefungsian, seni bina dan senario yang berkenaan. FlumeFlume ialah sistem pengumpulan, pengagregatan dan penghantaran data yang diedarkan, boleh dipercayai dan sangat tersedia Ia boleh mengumpul data daripada pelbagai sumber dan kemudian menyimpannya dalam HDFS.

Pemprosesan data masa nyata: Gunakan Go WaitGroup untuk memproses aliran data Pemprosesan data masa nyata: Gunakan Go WaitGroup untuk memproses aliran data Sep 28, 2023 pm 02:39 PM

Pemprosesan data masa nyata: Menggunakan GoWaitGroup untuk memproses aliran data Pengenalan: Dalam era data besar hari ini, pemprosesan data masa nyata telah menjadi bahagian penting dalam operasi perniagaan banyak perusahaan. Untuk aplikasi yang perlu memproses sejumlah besar data, cara mengendalikan aliran data dengan cekap telah menjadi isu utama. Dalam bahasa Go, WaitGroup boleh digunakan untuk mencapai penyegerakan antara berbilang goroutin, memisahkan aliran data dan memprosesnya secara serentak, meningkatkan kecekapan dan keselarasan pemprosesan data. Artikel ini akan memperkenalkan secara terperinci cara menggunakan G

See all articles