我发现这个问题的答案(例如这里,这里和这里)都涉及pfsockopen(),它似乎专为非本地套接字连接而设计。然而,我到目前为止编写的代码使用php通过本地连接访问C++服务器。我希望这个连接是持久的(顺便提一下,这样我就可以用它来进行Comet)。以下是我的非持久版本:
<?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);
?>
我发现不能简单地将'$sock'保存为$_SESSION变量并在每次调用此脚本时访问它。有什么窍门可以把它转化为持久连接吗?
socket_close($sock);
。可能这就是导致你的问题的原因? - hakre