php - php中的持久本地域套接字

标签 php javascript sockets comet persistent

我找到的这个问题的答案(例如 hereherehere)都涉及 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/

相关文章:

javascript - 此 jQuery getJSON AJAX 调用的回调方法存在问题

javascript - 将退出转换添加到基于 D3 圆包的可重用模块

php - Yii2:如何使用 AJAX 验证表单,然后再次使用 AJAX 提交数据

php - 如何在 localhost + ubuntu 中测试 PHP Socket 编程

PHP PDO 查询不适用于 Vars?

javascript - 删除最后一个子元素后删除父元素

php - 我可以从 mysql 表中提取 html 而不是纯文本吗?

java.net.SocketException : Socket is closed

sockets - 我们是否需要同时包含 <netinet/in.h> 和 <arpa/inet.h> header ?它们之间有什么区别?

apache-flex - Flex Crossdomain.xml文件和FTP