Table des matières
php socket 处理不过来数据流,该如何避免(好像是阻塞了)
Maison développement back-end tutoriel 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]);
}
?>


Copier après la connexion

www.bkjia.comtruehttp://www.bkjia.com/PHPjc/1023580.htmlTechArticlephp socket 处理不过来数据流,该如何避免(好像是阻塞了) php socket 处理不过来数据流,该如何处理(好像是阻塞了) 需求:php接受一个硬件往8...
Déclaration de ce site Web
Le contenu de cet article est volontairement contribué par les internautes et les droits d'auteur appartiennent à l'auteur original. Ce site n'assume aucune responsabilité légale correspondante. Si vous trouvez un contenu suspecté de plagiat ou de contrefaçon, veuillez contacter admin@php.cn

Outils d'IA chauds

Undresser.AI Undress

Undresser.AI Undress

Application basée sur l'IA pour créer des photos de nu réalistes

AI Clothes Remover

AI Clothes Remover

Outil d'IA en ligne pour supprimer les vêtements des photos.

Undress AI Tool

Undress AI Tool

Images de déshabillage gratuites

Clothoff.io

Clothoff.io

Dissolvant de vêtements AI

AI Hentai Generator

AI Hentai Generator

Générez AI Hentai gratuitement.

Article chaud

R.E.P.O. Crystals d'énergie expliqués et ce qu'ils font (cristal jaune)
3 Il y a quelques semaines By 尊渡假赌尊渡假赌尊渡假赌
R.E.P.O. Meilleurs paramètres graphiques
3 Il y a quelques semaines By 尊渡假赌尊渡假赌尊渡假赌
R.E.P.O. Comment réparer l'audio si vous n'entendez personne
3 Il y a quelques semaines By 尊渡假赌尊渡假赌尊渡假赌
WWE 2K25: Comment déverrouiller tout dans Myrise
4 Il y a quelques semaines By 尊渡假赌尊渡假赌尊渡假赌

Outils chauds

Bloc-notes++7.3.1

Bloc-notes++7.3.1

Éditeur de code facile à utiliser et gratuit

SublimeText3 version chinoise

SublimeText3 version chinoise

Version chinoise, très simple à utiliser

Envoyer Studio 13.0.1

Envoyer Studio 13.0.1

Puissant environnement de développement intégré PHP

Dreamweaver CS6

Dreamweaver CS6

Outils de développement Web visuel

SublimeText3 version Mac

SublimeText3 version Mac

Logiciel d'édition de code au niveau de Dieu (SublimeText3)

Intégration PHP et Apache NiFi pour la gestion et le traitement des flux de données Intégration PHP et Apache NiFi pour la gestion et le traitement des flux de données Jun 25, 2023 pm 12:25 PM

À l’ère du Big Data, la gestion et le traitement des données sont devenus un élément important du développement des entreprises. Pour le traitement des flux de données, ApacheNiFi est l'un des principaux outils de traitement de flux de données open source. Le langage PHP est très familier au développement de sites web et d'applications, alors comment intégrer PHP et Apache NiFi pour réaliser la gestion et le traitement des flux de données ? 1. Introduction à ApacheNiFi ApacheNiFi est un outil puissant et visuel de traitement de flux de données. Il peut visualiser des données provenant de divers

Méthode de conception de modèle de flux de données en langage Go Méthode de conception de modèle de flux de données en langage Go May 31, 2023 pm 11:21 PM

Avec le nombre croissant d'applications Internet, le traitement des données prend de plus en plus d'importance. Afin de mieux traiter les données et d'améliorer l'efficacité et la fiabilité du système, la conception de modèles de flux de données est devenue une méthode importante. Cet article expliquera comment concevoir un modèle de flux de données en langage Go, y compris les pipelines de flux, le regroupement, les filtres, etc. Canalisations de flux Les canalisations de flux sont un composant fondamental du modèle de flux de données et peuvent transmettre des données d'une unité de traitement à une autre. Dans le langage Go, vous pouvez utiliser des canaux comme canaux. Les canaux prennent en charge l'hétérogénéité des données.

Méthodes d'optimisation de Swoole et Workerman pour la transmission et le cryptage des données entre PHP et MySQL Méthodes d'optimisation de Swoole et Workerman pour la transmission et le cryptage des données entre PHP et MySQL Oct 15, 2023 pm 02:55 PM

Méthode d'optimisation de Swoole et Workerman pour la transmission et le cryptage des données entre PHP et MySQL Avec le développement rapide d'Internet, PHP, en tant que langage de programmation côté serveur couramment utilisé, est largement utilisé dans le domaine du développement Web. Dans les applications PHP, la transmission et la sécurité des données ont toujours été au centre des préoccupations des développeurs. Afin d'améliorer l'efficacité de la transmission des données et de protéger la sécurité des données, les développeurs utilisent généralement certaines méthodes d'optimisation. Cet article se concentrera sur Swoole et Workerman, deux outils couramment utilisés.

Guide de gestion des flux de données React : Comment gérer les flux de données front-end avec élégance Guide de gestion des flux de données React : Comment gérer les flux de données front-end avec élégance Sep 26, 2023 pm 07:45 PM

Guide de gestion des flux de données React : Comment gérer le flux de données front-end avec élégance Introduction : React est un framework de développement front-end très populaire. Il fournit une méthode de développement basée sur des composants, rendant le développement front-end plus modulaire et maintenable. Cependant, lors du développement d’applications complexes, la gestion du flux de données devient importante. Cet article présentera quelques méthodes pour gérer avec élégance le flux de données dans React et démontrera des exemples de code spécifiques. 1. Flux de données unidirectionnel React préconise l'utilisation d'un flux de données unidirectionnel pour gérer le flux de données. numéro à sens unique

Comment utiliser PHP Stream pour implémenter des opérations de flux de données Comment utiliser PHP Stream pour implémenter des opérations de flux de données Mar 27, 2024 pm 04:51 PM

Titre : PHPStream Data Stream Operation Guide Dans le développement Web, les opérations de flux de données sont des opérations très courantes et peuvent être utilisées pour des fonctions telles que la lecture du contenu d'un fichier, l'envoi de requêtes HTTP et le traitement des données réseau. PHP fournit une fonction Stream puissante, rendant les opérations de flux de données plus faciles et plus pratiques. Cet article explique comment utiliser PHPStream pour implémenter des opérations de flux de données et fournit des exemples de code spécifiques à titre de référence. 1. Concept de base En PHP, Stream est un flux de données abstrait qui peut

Technologie de traitement de flux de données haute performance en PHP Technologie de traitement de flux de données haute performance en PHP Jun 22, 2023 pm 01:17 PM

Avec la croissance continue des applications Internet et du volume de données, les exigences en matière de vitesse de traitement des données augmentent également. Dans le domaine du développement PHP, une technologie de traitement de flux de données haute performance est devenue une solution nécessaire. Cet article présentera et analysera la technologie de traitement de flux de données haute performance en PHP. 1. Principe du traitement du flux de données Dans les méthodes traditionnelles de traitement des données, la méthode de mise en cache des données en mémoire puis d'exécution d'opérations de lecture et d'écriture est souvent utilisée. Cependant, lorsque la quantité de données est trop importante, cela entraîne souvent des problèmes tels qu'un débordement de mémoire. La technologie de traitement des flux de données est différente, elle

Flume vs Kafka : quel outil est le meilleur pour gérer vos flux de données ? Flume vs Kafka : quel outil est le meilleur pour gérer vos flux de données ? Jan 31, 2024 pm 05:35 PM

FlumevsKafka : Quel outil est le meilleur pour le traitement de votre flux de données ? Flume et Kafka sont tous deux des outils de traitement de flux de données populaires pour collecter, agréger et transmettre de grandes quantités de données en temps réel. Les deux présentent les caractéristiques d’un débit élevé, d’une faible latence et d’une fiabilité, mais ils présentent certaines différences en termes de fonctionnalités, d’architecture et de scénarios applicables. FlumeFlume est un système de collecte, d'agrégation et de transmission de données distribué, fiable et hautement disponible. Il peut collecter des données provenant de diverses sources, puis les stocker dans HDFS.

Traitement des données en temps réel : utilisez Go WaitGroup pour traiter les flux de données Traitement des données en temps réel : utilisez Go WaitGroup pour traiter les flux de données Sep 28, 2023 pm 02:39 PM

Traitement des données en temps réel : utiliser GoWaitGroup pour traiter les flux de données Introduction : À l'ère actuelle du Big Data, le traitement des données en temps réel est devenu une partie importante de nombreuses opérations commerciales d'entreprise. Pour les applications qui doivent traiter de grandes quantités de données, la gestion efficace des flux de données est devenue une question clé. Dans le langage Go, WaitGroup peut être utilisé pour réaliser la synchronisation entre plusieurs goroutines, diviser le flux de données et le traiter simultanément, améliorant ainsi l'efficacité et la simultanéité du traitement des données. Cet article présentera en détail comment utiliser G

See all articles