我找到的这个问题的答案(例如 here、here 和 here)都涉及 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 变量并在每次调用此脚本时访问它。关于如何将其变成持久连接的任何提示?
最佳答案
正如您提供的链接指出的那样,php 不是一种持久性语言,并且无法在 session (即页面加载)之间保持持久性。您可以通过将第二个 php 脚本作为守护进程运行来创建一个中间地带,并让您的主脚本(即用户点击的脚本)连接到该脚本(是的 - 通过套接字......)并从中获取数据。
如果您要这样做,并且想避免 Web Sockets 的麻烦,请尝试新的 HTML5 EventStream API ,因为它为您提供了两全其美的优势:像基础设施一样的 comcomet,没有长轮询的麻烦,也不需要专用的 Web Sockets 服务器。
关于php - php中的持久本地域套接字,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8595686/