먼저 오류없이 작동하는 non tls를 사용하여 xmpp 서버를 생성했습니다. 구멍 인증이 작동하고 아무 문제없이 채팅 할 수 있습니다. 내가했던 소켓에서 읽기 시작하기 전에stream_socket_enable_crypto(); stream_set_timeout을 사용 중지합니다.
:
stream_set_timeout($sock, 0, 1000);
이 서버에서 새로운 데이터가없는 경우 나 시간 내에 일을 할 수있게된다.
이제 시작점을 구현했습니다. 내가 했어
stream_socket_enable_crypto($sock, true, STREAM_CRYPTO_METHOD_TLS_SERVER);
나는 나를 위해 tls를 협상한다. 읽기 시간 초과가 발생하여 협상이 실패했기 때문에이 작업이 수행되지 않았습니다.
나는 조금 더 시간 제한을 설정하려면stream_set_timeout($sock, 30, 0);
stream_socket_enable_crypto($sock, true, STREAM_CRYPTO_METHOD_TLS_SERVER);
stream_set_timeout($sock, 0, 1000);
에 위의 stream_socket_enable_crypto을 변경, 그래서 클라이언트는 (자기 signged 경우) 인증서를 수락하고 모든 TLS 물건을 30 초 시간을 가지고있다. 이 작업이 끝나면 실제로 타임 아웃을 다시 1000 마이크로 초로 설정해야합니다. 이 변경 후에 TLS 협상이 작동했지만 시간 제한 설정이 손실되었습니다.
이것은 내 문제입니다. 2 stream_set_timeoutstream_socket_enable_crypto 이후에 호출이 작동하지 않습니다.
나는 로그 항목
echo "AFTER PROCESS MESSAGE QUEUE\n";
$buffer = fread($sock, 4096);
echo "AFTER SOCKET READ\n";
PROCESS 메시지 큐가 인쇄 된 후 메시지 하지만 소켓 READ가 인쇄되지 후 을 가지고 내가 기다리는 시간을 중요하지 않습니다.
아무도 내가 스트림 읽기 시간 초과를 1000 마이크로 초로 다시 설정할 수있는 방법이 있습니까? 귀하의 정보에 대한
: 내가 거짓으로 stream_set_blocking 것은 현재 이 원하는하지입니다 설정해야 해결책. 현재로서는 차단 솔루션 만 필요합니다. 비 차단을 사용하는 다른 솔루션이 없다면 당연히 알고 싶습니다. :)
:
stream_select
내가 문제를 해결 도움이되었다. 설명을 추가하려면 답을 편집하십시오. –