PHP websocket服务器和mysql连接

Posted

技术标签:

【中文标题】PHP websocket服务器和mysql连接【英文标题】:PHP websocket server and mysql connection 【发布时间】:2013-01-08 07:36:26 【问题描述】:

我有一个基于this one 的php websocket 服务器。这个 websocket 服务器在与公共 web 服务器不同的 apache 上运行,但在同一个物理服务器上,所以我需要一个数据库连接来检索用户数据。用户数据由当前会话 id 获取,当用户登录时,该会话 id 也会在数据库中更新。现在,如果我运行我的 websocket 服务器,它可以完美运行,但经过一段不错的时间(不能说时间跨度),结果仍然为空.我检查了数据集。

查询字符串是最新的,并且正确的会话 ID 在数据库中,它应该返回所需的行,但结果保持为空。如果我杀死进程并运行这个 websocket 服务器,它会暂时工作,但过一段时间结果又是空的。

这是我的 websocketserver.php 简化版:

set_time_limit(0);
require 'class.PHPWebSocket.php';

$db1 = mysql_connect( 'localhost', 'dev', 'xxxxxxxx' );
mysql_select_db('cb_dev',$db1);

function wsOnMessage($clientID, $message, $messageLength, $binary) 
    global $Server;

    $sessionid = "/*just imagine a session id here*/";
    $result = mysql_query("SELECT username, id FROM users WHERE sessionid = '$sessionid'");
    $row = mysql_fetch_row($result);


function wsOnOpen($clientID) 
    //


function wsOnClose($clientID, $status) 
    //


$Server = new PHPWebSocket();
$Server->bind('message', 'wsOnMessage');
$Server->bind('open', 'wsOnOpen');
$Server->bind('close', 'wsOnClose');

$Server->wsStartServer('0.0.0.0', 9010);

注意:使用的会话 ID 正确提供,所以这不是问题。

【问题讨论】:

能否贴出用户登录时更新会话ID的代码? 【参考方案1】:

Swoole 是满足您要求的更好选择。 它支持 PHP 中的原生 websocket 服务器和异步 mysql,带有 c 扩展名

WebSocket 服务器示例:

$ws = new swoole_websocket_server("0.0.0.0", 9502);

$ws->on('open', function ($ws, $request) 
    var_dump($request->fd, $request->get, $request->server);
    $ws->push($request->fd, "hello, welcome\n");
);

$ws->on('message', function ($ws, $frame) 
    echo "Message: $frame->data\n";
    $ws->push($frame->fd, "server: $frame->data");
);

$ws->on('close', function ($ws, $fd) 
    echo "client-$fd is closed\n";
);

$ws->start();

【讨论】:

【参考方案2】:

这是因为您的 $sessionid 已过期。需要设置更高的超时时间:

// 1 hour
ini_set('session.gc_maxlifetime', 3600);
session_set_cookie_params(3600);

【讨论】:

以上是关于PHP websocket服务器和mysql连接的主要内容,如果未能解决你的问题,请参考以下文章

php 简单实现webSocket(demo)

gin建立websocket服务

Websocket PHP:从客户端发送到服务器的立即断开连接和奇怪的消息字符串

websocket 服务器找不到类 mysqli。如何在我自己的 websocket 服务器中使用 mysql 数据库连接? [复制]

php是如何实现websocket实时消息推送的

php 怎么使用websocket推送消息