목차
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 기반 앱

AI Clothes Remover

AI Clothes Remover

사진에서 옷을 제거하는 온라인 AI 도구입니다.

Undress AI Tool

Undress AI Tool

무료로 이미지를 벗다

Clothoff.io

Clothoff.io

AI 옷 제거제

AI Hentai Generator

AI Hentai Generator

AI Hentai를 무료로 생성하십시오.

뜨거운 도구

메모장++7.3.1

메모장++7.3.1

사용하기 쉬운 무료 코드 편집기

SublimeText3 중국어 버전

SublimeText3 중국어 버전

중국어 버전, 사용하기 매우 쉽습니다.

스튜디오 13.0.1 보내기

스튜디오 13.0.1 보내기

강력한 PHP 통합 개발 환경

드림위버 CS6

드림위버 CS6

시각적 웹 개발 도구

SublimeText3 Mac 버전

SublimeText3 Mac 버전

신 수준의 코드 편집 소프트웨어(SublimeText3)

데이터 흐름 관리 및 처리를 위한 PHP 및 Apache NiFi 통합 데이터 흐름 관리 및 처리를 위한 PHP 및 Apache NiFi 통합 Jun 25, 2023 pm 12:25 PM

빅데이터 시대에 데이터 관리 및 처리는 기업 발전의 중요한 부분이 되었습니다. 데이터 스트림 처리의 경우 ApacheNiFi는 최고의 오픈 소스 데이터 스트림 처리 도구입니다. PHP 언어는 웹 사이트 및 애플리케이션 개발에 매우 ​​익숙합니다. 그렇다면 PHP와 Apache NiFi를 통합하여 데이터 흐름 관리 및 처리를 달성하는 방법은 무엇입니까? 1. ApacheNiFi 소개 ApacheNiFi는 강력한 시각적 데이터 스트림 처리 도구입니다. 다양한 데이터를 시각화할 수 있습니다.

Go 언어의 데이터 흐름 모델 설계 방법 Go 언어의 데이터 흐름 모델 설계 방법 May 31, 2023 pm 11:21 PM

인터넷 애플리케이션의 수가 증가함에 따라 데이터 처리가 점점 더 중요해지고 있습니다. 데이터를 더 잘 처리하고 시스템 효율성과 신뢰성을 향상시키기 위해 데이터 흐름 모델 설계가 중요한 방법이 되었습니다. 이 기사에서는 흐름 파이프라인, 그룹화, 필터 등을 포함하여 Go 언어로 데이터 흐름 모델을 설계하는 방법을 소개합니다. 스트림 파이프 스트림 파이프는 데이터 흐름 모델의 기본 구성 요소이며 한 처리 장치에서 다른 처리 장치로 데이터를 전달할 수 있습니다. Go 언어에서는 채널을 파이프라인으로 사용할 수 있으며, 채널은 데이터 이질성을 지원합니다.

PHP와 MySQL 간의 데이터 전송 및 데이터 암호화를 위한 Swoole 및 Workerman의 최적화 방법 PHP와 MySQL 간의 데이터 전송 및 데이터 암호화를 위한 Swoole 및 Workerman의 최적화 방법 Oct 15, 2023 pm 02:55 PM

PHP와 MySQL 간의 데이터 전송 및 데이터 암호화를 위한 Swoole과 Workerman의 최적화 방법 인터넷의 급속한 발전과 함께 일반적으로 사용되는 서버측 프로그래밍 언어인 PHP는 웹 개발 분야에서 널리 사용되고 있습니다. PHP 애플리케이션에서 데이터 전송과 데이터 보안은 항상 개발자의 초점이었습니다. 데이터 전송 효율성을 높이고 데이터 보안을 보호하기 위해 개발자는 일반적으로 몇 가지 최적화 방법을 사용합니다. 이 기사에서는 일반적으로 사용되는 두 가지 Swoole 및 Workerman에 중점을 둘 것입니다.

React 데이터 흐름 관리 가이드: 프런트엔드 데이터 흐름을 적절하게 처리하는 방법 React 데이터 흐름 관리 가이드: 프런트엔드 데이터 흐름을 적절하게 처리하는 방법 Sep 26, 2023 pm 07:45 PM

React 데이터 흐름 관리 가이드: 프런트 엔드 데이터 흐름을 우아하게 처리하는 방법 소개: React는 매우 인기 있는 프런트 엔드 개발 프레임워크로, 프런트 엔드 개발을 더욱 모듈화하고 유지 관리 가능하게 만드는 구성 요소 기반 개발 방법을 제공합니다. 그러나 복잡한 애플리케이션을 개발할 때는 데이터 흐름 관리가 중요합니다. 이 기사에서는 React에서 데이터 흐름을 우아하게 처리하는 몇 가지 방법을 소개하고 구체적인 코드 예제를 보여줍니다. 1. 단방향 데이터 흐름 React는 데이터 흐름을 관리하기 위해 단방향 데이터 흐름 사용을 옹호합니다. 단방향 번호

PHP 스트림을 사용하여 데이터 흐름 작업을 구현하는 방법 PHP 스트림을 사용하여 데이터 흐름 작업을 구현하는 방법 Mar 27, 2024 pm 04:51 PM

제목: PHPStream 데이터 스트림 작업 가이드 웹 개발에서 데이터 스트림 작업은 매우 일반적인 작업이며 파일 콘텐츠 읽기, HTTP 요청 보내기, 네트워크 데이터 처리 및 기타 기능에 사용될 수 있습니다. PHP는 강력한 스트림 기능을 제공하여 데이터 흐름 작업을 더 쉽고 편리하게 만듭니다. 이 기사에서는 PHPStream을 사용하여 데이터 흐름 작업을 구현하는 방법을 소개하고 참조용 특정 코드 예제를 제공합니다. 1. 기본 개념 PHP에서 Stream은 추상적인 데이터 스트림입니다.

PHP의 고성능 데이터 스트림 처리 기술 PHP의 고성능 데이터 스트림 처리 기술 Jun 22, 2023 pm 01:17 PM

인터넷 애플리케이션과 데이터 양이 지속적으로 증가함에 따라 데이터 처리에 대한 속도 요구 사항도 증가하고 있습니다. PHP 개발 분야에서는 고성능 데이터 스트림 처리 기술이 필수 솔루션이 되었습니다. 본 글에서는 PHP의 고성능 데이터 스트림 처리 기술을 소개하고 분석하겠습니다. 1. 데이터 스트림 처리 원리 전통적인 데이터 처리 방법에서는 데이터를 메모리에 캐시한 후 읽기 및 쓰기 작업을 수행하는 방식이 자주 사용됩니다. 그러나 데이터의 양이 너무 많으면 메모리 오버플로 등의 문제가 발생하는 경우가 많습니다. 데이터 스트림 처리 기술은 다릅니다.

Flume 대 Kafka: 데이터 흐름을 처리하는 데 더 좋은 도구는 무엇입니까? Flume 대 Kafka: 데이터 흐름을 처리하는 데 더 좋은 도구는 무엇입니까? Jan 31, 2024 pm 05:35 PM

FlumevsKafka: 데이터 스트림 처리에 어떤 도구가 더 좋나요? 개요 Flume과 Kafka는 모두 대량의 실시간 데이터를 수집, 집계 및 전송하는 데 널리 사용되는 데이터 스트림 처리 도구입니다. 둘 다 높은 처리량, 낮은 대기 시간 및 안정성이라는 특징을 가지고 있지만 기능, 아키텍처 및 적용 가능한 시나리오에는 약간의 차이가 있습니다. FlumeFlume은 분산되고 안정적이며 가용성이 높은 데이터 수집, 집계 및 전송 시스템입니다. 다양한 소스에서 데이터를 수집한 다음 HDFS에 저장할 수 있습니다.

실시간 데이터 처리: Go WaitGroup을 사용하여 데이터 스트림 처리 실시간 데이터 처리: Go WaitGroup을 사용하여 데이터 스트림 처리 Sep 28, 2023 pm 02:39 PM

실시간 데이터 처리: GoWaitGroup을 사용하여 데이터 흐름 처리 소개: 오늘날의 빅 데이터 시대에 실시간 데이터 처리는 많은 기업 비즈니스 운영에서 중요한 부분이 되었습니다. 대용량 데이터를 처리해야 하는 애플리케이션의 경우, 데이터 스트림을 어떻게 효율적으로 처리하는가가 중요한 문제가 되었습니다. Go 언어에서는 WaitGroup을 사용하여 여러 고루틴 간의 동기화를 달성하고, 데이터 흐름을 분할하고 동시에 처리하여 데이터 처리의 효율성과 동시성을 향상시킬 수 있습니다. 이번 글에서는 G 사용법을 자세히 소개하겠습니다.

See all articles