
stream_notification_callback 함수는 PHP에서 사용하는 비동기 통신을 위한 callback 함수입니다. 이 함수는 stream_socket_accept 함수와 함께 사용하여, 클라이언트와의 연결을 수락하고, 데이터를 전송하는 데 사용됩니다.
stream_notification_callback 함수를 사용하여 실시간 업데이트를 구현하는 방법은 다음과 같습니다.
1. stream_socket_accept 함수를 사용하여 클라이언트와의 연결을 수락합니다.
2. stream_notification_callback 함수를 등록하여 데이터를 전송할 때마다 호출합니다.
3. callback 함수 내에서 데이터를 처리하고, 클라이언트에게 전송합니다.
stream_notification_callback 함수의 파라미터는 다음과 같습니다.
- $read: 읽을 데이터를 담은 배열
- $write: 쓰기 데이터를 담은 배열
- $except: 예외 데이터를 담은 배열
옵션으로는 다음과 같습니다.
- STREAM_NOTIFY_CALLBACK_PARAM: callback 함수 내에서 사용할 데이터를 담은 배열
- STREAM_NOTIFY_CLOSE: 연결이 닫혔을 때 호출
- STREAM_NOTIFY_CONNECT: 연결이 수립되었을 때 호출
- STREAM_NOTIFY_ERROR: 오류가 발생했을 때 호출
- STREAM_NOTIFY_EOF: 데이터가 끝났을 때 호출
- STREAM_NOTIFY_FLUSH_ON_CLOSE: 연결이 닫히면 버퍼를 비우기 위해 호출
- STREAM_NOTIFY_PAUSED: 데이터 전송이 중단되었을 때 호출
- STREAM_NOTIFY_PROGRESS: 데이터 전송의 진행 상황을 알려주기 위해 호출
- STREAM_NOTIFY_WRITE_COMPLETE: 데이터를 전송한 후 호출
예를 들어, stream_notification_callback 함수를 사용하여 실시간 업데이트를 구현하는 코드는 다음과 같습니다.
#hostingforum.kr
php
$server = stream_socket_server('tcp://localhost:1234', $errno, $errstr);
if (!$server) {
die("소켓 생성 실패: $errstr ($errno)n");
}
stream_set_blocking($server, 0);
$callback = function($read, $write, $except) {
if ($read) {
echo "클라이언트가 데이터를 보냈습니다.n";
}
if ($write) {
echo "클라이언트에게 데이터를 보냈습니다.n";
}
if ($except) {
echo "예외가 발생했습니다.n";
}
};
stream_notification_callback($callback);
while (true) {
$client = stream_socket_accept($server);
if ($client) {
echo "클라이언트와 연결되었습니다.n";
stream_set_blocking($client, 0);
stream_notification_callback($callback);
while (true) {
$data = fread($client, 1024);
if ($data === false) {
break;
}
echo "클라이언트가 데이터를 보냈습니다.n";
fwrite($client, "서버에서 데이터를 보냈습니다.");
}
fclose($client);
}
}
이 코드는 클라이언트와의 연결을 수락하고, 데이터를 전송하는 데 사용됩니다. callback 함수 내에서 데이터를 처리하고, 클라이언트에게 전송합니다.
2025-05-12 14:38