socket_createの返り値を$_SESSIONに入れたときの保存期間
現在jQuery+PHPで画面を開いたときにsocket_createで接続し、成功したら以降は
socket_createせずにsocket_write(),socket_read()を繰り返すソースを書いています。
PHPの関数はjsで3sec毎に呼び出され、phpで取得したデータを#datadisplayのidを付けた
テーブルタブに更新するものです。(*1)
本題は、呼び出されたphp内でsocket_create -> socket_write() -> socket_read() -> socket_close()をしています。
しかし、画面を開いた際にsocket_create()し、成功したら$_SESSION('socketNo')に返り値を格納し、以後はsocket_write() -> socket_read()を繰り返し、終了時には手動操作によりsocket_close()を呼び出そうとした場合、1回目の処理には$_SESSION('socketNo')が格納されるのですが、2回目以降phpが呼び出された際に$_SESSION('socketNo')の値が0になってしまい、socket_write(),socket_read()の処理でエラーが戻ってきてしまいます。(*2)
socket_create()の返り値を$_SESSION('socketNo')に入れて保管するのはできないのでしょうか?
わかりにくい文になってしまい、申し訳ございませんが、よろしくお願い致します。
以下、一部略している箇所がありますが、該当箇所のコードを添付します。
(*1)------------------------------------------------------
function displayData()
{
$("#datadisplay").load("dispData.php").fadeIn("normal");
}
$.get("dispData.php",{},displayData);
function autoRefresh(interval){
autoloader = setInterval(displayData,interval);
}
autoRefresh(3000);
(*2)------------------------------------------------------
<?php
session_start();
// tcp socket client
function connect($sendCmd, $ver)
{
global $sysVer, $recvBuf;
$socket = $_SESSION['socketNo'];
ChromePhp::log('sendCmd'.$sendCmd);
ChromePhp::log('log : connectFlg : '.$_SESSION['connectFlg']);
ChromePhp::log('log : socketNo : '.$socket); // <==== 接続後の値が0になる
if( $_SESSION['connectFlg'] == 0 ) {
ChromePhp::log('connect to server : start');
$server = '127.0.0.1';
$port = 1000;
$headLen = 8;
// ソケット接続(TCP/IP)
if(!($socket = socket_create(AF_INET, SOCK_STREAM, SOL_TCP)))
{
$errorcode = socket_last_error();
$errormsg = socket_strerror($errorcode);
die("Couldn't create socket: [$errorcode] $errormsg \n");
}
if(!($result = socket_connect($socket, $server, $port)))
{
$errorcode = socket_last_error();
$errormsg = socket_strerror($errorcode);
die("Couldn't connect socket: [$errorcode] $errormsg \n");
}
$_SESSION['connectFlg'] = 1;
ChromePhp::log('connect to server : success'.$_SESSION['connectFlg']);
$_SESSION['socketNo'] = $socket;
}
$socket = $_SESSION['socketNo'];
ChromePhp::log('get data');
//get data
$in = pack('s*', $sendCmd, 0, 0, 0);
socket_write($socket, $in, strlen($in));
$buf = socket_read($socket, $headLen);
$out = unpack('s*', $buf);
$dataSize = $out[4];
$buf = socket_read($socket, $dataSize);
$recvBuf = $buf;
}
?>