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
<!-- Code highlighting produced by Actipro CodeHighlighter (freeware) http://www.CodeHighlighter.com/ --> <?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]); } ?>
------解决方案--------------------
非阻塞模式

Alat AI Hot

Undresser.AI Undress
Apl berkuasa AI untuk mencipta foto bogel yang realistik

AI Clothes Remover
Alat AI dalam talian untuk mengeluarkan pakaian daripada foto.

Undress AI Tool
Gambar buka pakaian secara percuma

Clothoff.io
Penyingkiran pakaian AI

AI Hentai Generator
Menjana ai hentai secara percuma.

Artikel Panas

Alat panas

Notepad++7.3.1
Editor kod yang mudah digunakan dan percuma

SublimeText3 versi Cina
Versi Cina, sangat mudah digunakan

Hantar Studio 13.0.1
Persekitaran pembangunan bersepadu PHP yang berkuasa

Dreamweaver CS6
Alat pembangunan web visual

SublimeText3 versi Mac
Perisian penyuntingan kod peringkat Tuhan (SublimeText3)

Topik panas



Artikel ini membawa anda pengetahuan yang berkaitan tentang php+socket, yang terutamanya memperkenalkan pemultipleksan IO dan bagaimana php+socket melaksanakan pelayan web? Rakan-rakan yang berminat boleh lihat di bawah ini semoga bermanfaat untuk semua.

1. Pengaturcaraan soket berdasarkan protokol TCP 1. Aliran kerja soket bermula dengan bahagian pelayan. Pelayan mula-mula memulakan Soket, kemudian mengikat ke port, mendengar port, menerima panggilan untuk menyekat, dan menunggu klien menyambung. Pada masa ini, jika pelanggan memulakan Soket dan kemudian menyambung ke pelayan, jika sambungan berjaya, sambungan antara klien dan pelayan diwujudkan. Pelanggan menghantar permintaan data, pelayan menerima permintaan dan memproses permintaan, kemudian menghantar data respons kepada klien, klien membaca data, dan akhirnya menutup sambungan Gunakan kod Python berikut untuk melaksanakan: importso

Penyediaan Gunakan vuecreateexample untuk mencipta projek Parameternya adalah seperti berikut: gunakan input asli terutamanya nilai dan perubahan. App.tsx adalah seperti berikut: import{ref}from'vue';exportdefault{setup(){//username is the data constusername=ref('Zhang San');//Apabila kotak input berubah, segerakkan data constonInput =;kembali( )=>({

Langkah pertama pada bahagian SpringBoot ialah memperkenalkan kebergantungan Pertama, kita perlu memperkenalkan kebergantungan yang diperlukan untuk WebSocket, serta kebergantungan untuk memproses format output com.alibabafastjson1.2.73org.springframework.bootspring-boot-starter-websocket. . Langkah kedua ialah mencipta kelas konfigurasi WebSocket importorg.context.annotation.Bean;importorg.springframework.context.annotation.Config.

Penyelesaian kepada masalah bahawa soket php tidak boleh disambungkan: 1. Semak sama ada sambungan soket didayakan dalam php 2. Buka fail php.ini dan semak sama ada "php_sockets.dll" dimuatkan; ".

Dengan perkembangan Internet, pemindahan fail telah menjadi bahagian yang sangat diperlukan dalam kerja dan hiburan harian orang ramai. Walau bagaimanapun, kaedah pemindahan fail tradisional seperti lampiran e-mel atau tapak web perkongsian fail mempunyai had tertentu dan tidak dapat memenuhi keperluan masa nyata dan keselamatan. Oleh itu, menggunakan teknologi PHP dan Socket untuk mencapai pemindahan fail masa nyata telah menjadi penyelesaian baharu. Artikel ini akan memperkenalkan prinsip teknikal, kelebihan dan senario aplikasi menggunakan teknologi PHP dan Socket untuk mencapai pemindahan fail masa nyata, dan menunjukkan kaedah pelaksanaan teknologi ini melalui kes tertentu. teknologi

Cara melaksanakan medan tersembunyi input laravel: 1. Cari dan buka fail templat Blade 2. Gunakan kaedah method_field dalam templat Blade untuk mencipta medan tersembunyi Sintaks penciptaan ialah "{{ method_field('DELETE') }} ".

Masalah dan penyelesaian komunikasi rangkaian dan keselamatan biasa dalam C# Dalam era Internet hari ini, komunikasi rangkaian telah menjadi bahagian yang sangat diperlukan dalam pembangunan perisian. Dalam C#, kami biasanya menghadapi beberapa masalah komunikasi rangkaian, seperti keselamatan penghantaran data, kestabilan sambungan rangkaian, dsb. Artikel ini akan membincangkan secara terperinci komunikasi rangkaian biasa dan isu keselamatan dalam C# dan menyediakan penyelesaian yang sepadan serta contoh kod. 1. Masalah komunikasi rangkaian Gangguan sambungan rangkaian: Semasa proses komunikasi rangkaian, sambungan rangkaian mungkin terganggu, yang boleh menyebabkan
