현재 위치: > 함수 카테고리 모음> socket_select

socket_select

지정된 타임 아웃 소켓 어레이에서 select () 시스템 호출 실행
이름:socket_select
분류:소켓
사용 언어:php
한 줄 설명:주어진 소켓 세트에서 I/O 작업 차단의 멀티플렉싱

함수 이름 : socket_select ()

해당 버전 : PHP 4> = 4.3.0, PHP 5, PHP 7

함수 설명 : socket_select () 함수는 주어진 소켓 세트에서 I/O 작업을 멀티 플렉스하는 데 사용됩니다. 여러 소켓을 동시에 모니터링하여 입력, 출력 또는 예외 이벤트가 발생하는 소켓이 발생할 수 있습니다. 이 기능은 운영 체제가 제공 한 선택 시스템 호출을 기반으로 구현됩니다.

구문 : int socket_select (array & $ read, array & $ write, array & $, int $ tv_sec [, int $ tv_usec = 0]).

매개 변수 :

  • $ 읽기 : 읽기 이벤트를 모니터링 해야하는 소켓 배열.
  • $ 쓰기 : 쓰기 이벤트를 모니터링 해야하는 소켓이 포함 된 배열.
  • 예외 : 예외 이벤트를 모니터링 해야하는 소켓 배열.
  • $ tv_sec : 시간 초과 시간은 초입니다. 0이라면 무한 대기를 의미합니다.
  • $ TV_USEC : 시간 초과 시간의 마이크로 초 부분. 기본값은 0입니다.

반품 값 :

  • 하나 이상의 소켓이 읽기, 쓰기 또는 예외가있는 경우 반환 값은 0보다 큽니다.
  • 시간 초과 시간에 도달하면 반환 값은 0입니다.
  • 오류가 발생하면 반환 값은 -1입니다.

예:

 $serverSocket = socket_create(AF_INET, SOCK_STREAM, SOL_TCP); socket_bind($serverSocket, '127.0.0.1', 8888); socket_listen($serverSocket); $clientSockets = array($serverSocket); $write = $except = array(); while (true) { $read = $clientSockets; // 用于监视读事件的socket数组// 使用socket_select()等待事件发生if (socket_select($read, $write, $except, 0) < 1) { continue; } // 检查是否有新的客户端连接if (in_array($serverSocket, $read)) { $clientSocket = socket_accept($serverSocket); $clientSockets[] = $clientSocket; echo "New client connected." . PHP_EOL; // 从读事件数组中移除服务器socket $key = array_search($serverSocket, $read); unset($read[$key]); } // 处理已连接的客户端发送的数据foreach ($read as $clientSocket) { $data = socket_read($clientSocket, 1024); if ($data === false) { // 客户端断开连接$key = array_search($clientSocket, $clientSockets); unset($clientSockets[$key]); socket_close($clientSocket); echo "Client disconnected." . PHP_EOL; } else { // 处理客户端发送的数据echo "Received data: " . $data . PHP_EOL; } } } // 关闭服务器socket socket_close($serverSocket);

위의 예는 socket_select () 함수를 사용하여 멀티플렉싱을 구현하는 간단한 TCP 서버를 보여줍니다. 루프에서 Socket_Select ()을 통해 이벤트가 발생할 때까지 기다린 다음 새 클라이언트 연결, 클라이언트 단절 및 클라이언트가 전송하는 데이터 수신과 같은 리턴 결과에 따라 다른 상황을 처리하십시오. 이 방법은 단일 스레드에서 여러 클라이언트 연결을 동시에 처리하여 서버 성능 및 동시 처리 기능을 향상시킬 수 있습니다.

유사한 함수
  • 메시지를 읽으십시오 socket_recvmsg

    socket_recvmsg

    메시지를읽으십시오
  • 연결된 소켓에서 데이터를 수신합니다 socket_recv

    socket_recv

    연결된소켓에서데이터를수신합니다
  • 소켓을 닫으려면 수신, 보내거나 둘 ​​다 socket_shutdown

    socket_shutdown

    소켓을닫으려면수신,보내거나둘​​다
  • 소켓의 연결을 듣습니다 socket_listen

    socket_listen

    소켓의연결을듣습니다
  • 소켓 확장 리소스를 스트림으로 내보내는 소켓을 캡슐화했습니다 socket_export_stream

    socket_export_stream

    소켓확장리소스를스트림으로내보내는소켓을
  • 이름을 소켓에 바인딩하십시오 socket_bind

    socket_bind

    이름을소켓에바인딩하십시오
  • 소켓에서 연결을 수락합니다 socket_accept

    socket_accept

    소켓에서연결을수락합니다
  • 소켓 오류를 설명하는 문자열을 반환합니다 socket_strerror

    socket_strerror

    소켓오류를설명하는문자열을반환합니다
인기 기사