I am wondering if anyone can give me any information/advice on PHP with event looping.
****** BACKGROUND INFO ******
I've actually been messing around with a Jabber PHP class (class_Jabber.php, gotten from http://code.blitzaffe.com/pages/phpc...r_client_52-11 and which was successfully used to create a pretty cool web IM app, Centova.)
The class is totally, completely over my head even though it came with a little test/example script. So I am just trying to get to the basics and understand how this kind of thing can even work in PHP in the first place.
The test script that came with the jabber class basically connects/loggs into a jabber server, and then pings the server every second for 30 seconds to see if the server is sending any info, echoing "Heartbeat" every second. Of course, if you just run this in a web page the page hangs for 30 seconds and then displays "Heartbeat" 30 times once the loop is broken out of.
***** MY QUESTION *****
Since PHP has to process everything before dumping it to the server (at least, I've never seen it otherwise) it seemed to me the only way to proceed would to be as follows.
1) Start a session in the "loop.php" (that is the jabber test) file. Every time it echos "Heartbeat", increment some session variable.
2) Create a page "test.php" with two iframes. In one (hidden) iframe, include the loop.php file (this way, the created apge will fully load and display anything that it has on it, but the loop will still effectively be running in this page since it is included in the hidden iframe. In the second (visible) iframe, include another file, "iframe.php", which simply dumps the session.
3) Write a little piece of Javascript that calls a function every two seconds: this function re-updates the visible iframe with the iframe.php file.
So my grand idea was, as the 30 second loop is running in the background and actively updating the SESSION with some incremented number each second, at the same time, every two seconds the SESSION is accessed and echoed by a different file. Since the endless loop is running all alone in its iframe, I figured that it wouldn't cause the parent page or the visible iframe page to hang.
But I was wrong, and I'm not sure what part is failing. My result is that the parent page prints out what its supposed to print, and then I am left staring at two empty iframes for 30 seconds, after which point the info is dumped into the iframes. ***Weirdly enough, even when the info is dumped, the visible iframe doesn't print out the increment variable in the session even though I know it has access to the session.
I'm at a completely loss. I'm really just fumbling in the dark here. If anyone can even remotely point me in the right direction, I'd be very grateful.
***** RELEVANT CODE *****
test.php (the wrapper file, if you will)
Code:
<?
session_start();
?>
<html>
<head>
<script type="text/javascript">
function execute() {
jxexecute.location = "iframe.php";
setTimeout('execute()',2000)
}
</script>
</head>
<body onload="setTimeout('execute()',2000);">
This is the test PHP event loop page.<br><br>
<b>Iframe that is supposed to get updates every two seconds</b><br>
<iframe name='jxexecute' style="width: 550px; height: 200px; visibility: visible" src='' scrolling="auto"></iframe><br><br>
<b>Iframe that is supposed to be hidden, running the looping function</b><br>
<iframe name='hideme' style="width: 550px; height:200px; visibility: visible" src='loop.php' scrolling="auto"></iframe>
</body>
</html>
iframe.php (the file included in the visible iframe that just dumps session)
Code:
<?
session_start();
echo "Welcome to the Iframe that is supposed to get updates time is: " . time();
echo "<br>The dummy SESSION var is: " . $_SESSION['dummyvar'] . "<br><br>";
for($i=0; $i<count($_SESSION['heartbeat']); $i++) {
echo "heartbeats in session: " . $_SESSION['heartbeat'][$i] . "<br>";
}
?>
loop.php
Code:
session_start();
$_SESSION['dummyvar'] = "I am the dummy session var";
echo $_SESSION['dummyvar'] ."<br>";
define("RUN_TIME",30); // set a maximum run time of 30 seconds
define("CBK_FREQ",1); // fire a callback event every second
.
.
.
$cd =0;
function handleHeartbeat() {
$_SESSION['heartbeat'][cd] = $cd;
echo $_SESSION['heartbeat'][cd] ."<br>";
$cd++;
.
.
.
}
require_once("Common/class_Jabber.php");
$jab = new Jabber(true);
.
.
.
$jab->connect(JABBER_SERVER));
// now, tell the Jabber class to begin its execution loop
// this function ends up calling handleHeartbeat() every second
$jab->execute(CBK_FREQ,RUN_TIME);
Bookmarks