이 질문에 대한 답변 (예 : here, here 및 here)에는 모두 비 로컬 소켓 연결을 지원하는 pfsockopen()이 관련되어 있습니다. 그러나, 지금까지 작성한 코드는 PHP를 사용하여 로컬 연결을 통해 C++ 서버에 액세스합니다. 이 연결을 영구적으로 유지하고 싶습니다. (필자는 부수적으로 Comet을 사용할 수있게되었습니다.) 여기 내 비 영구적 인 버전이다 :PHP의 영구 로컬 도메인 소켓
<?php
session_start();
...
if (($sock = socket_create(AF_UNIX, SOCK_STREAM,0)) === false)
{
echo "socket_create() failed: reason: " . socket_strerror(socket_last_error()) . "\n";
exit();
}
$sess_id = $_SESSION['sess_id'];
$sock_str = '/tmp/sockdir/' . $sess_id; //The socket is named after the php session, not important
if (socket_connect($sock, $sock_str) === false)
{
echo "socket_connect() to " . $sock_str . " failed: reason: " . socket_strerror(socket_last_error($sock)) . "\n";
socket_close($sock);
exit();
}
$msg = $_GET['message'];
// ... do things with $msg
socket_close($sock);
?>
가 지금은 단순히 $ _SESSION 변수로 '$ 양말'를 저장할 수 없습니다 단순히 그것을이 스크립트가 호출 될 때마다 액세스, 나는 발견했습니다. 이것을 영구 연결로 바꿀 수있는 방법에 대한 조언
여기서 문제는 요청이 상태 저장이라는 것입니다. PHP 응용 프로그램은 요청이 활성화되었을 때 메모리에서 실행 중입니다. 왜 연결성이 지속되어야할까요? – tkone
@tkone 특정 클라이언트 요청과 독립적으로 서버에서 생성 된 메시지에 응답하려면 웹 페이지가 필요합니다. 이것은 일반적으로 요구되는 기능입니다 (예 : [여기] (http://en.wikipedia.org/wiki/Comet_%28programming%29); 이들은 서버 측 이벤트라고도합니다. –
웹 소켓을 찾으십니까? "페이지"는 무언가를해야합니까? 이것은 클라이언트에로드 된 페이지를 의미합니까? socket.io를 사용해 보셨습니까? 아직 PHP 서버 인스턴스가 없지만 거기에 도움이 될 것입니다. 또는 웹 소켓이나 아약스 긴 폴링을 지원하는 방법을 살펴보십시오. – tkone