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]); } ?>
Copier après la connexion

Outils d'IA chauds

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

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

Undress AI Tool
Images de déshabillage gratuites

Clothoff.io
Dissolvant de vêtements AI

AI Hentai Generator
Générez AI Hentai gratuitement.

Article chaud

Outils chauds

Bloc-notes++7.3.1
Éditeur de code facile à utiliser et gratuit

SublimeText3 version chinoise
Version chinoise, très simple à utiliser

Envoyer Studio 13.0.1
Puissant environnement de développement intégré PHP

Dreamweaver CS6
Outils de développement Web visuel

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

À 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

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é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 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

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

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

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 : 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
