Created
August 3, 2011 15:57
-
-
Save joseph-montanez/1122992 to your computer and use it in GitHub Desktop.
Possible coment style chat?
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
<?php | |
$socket = stream_socket_server ('tcp://0.0.0.0:2000', $errno, $errstr); | |
stream_set_blocking($socket, 0); | |
$base = event_base_new(); | |
$event = event_new(); | |
event_set($event, $socket, EV_READ | EV_PERSIST, 'ev_accept', $base); | |
event_base_set($event, $base); | |
event_add($event); | |
event_base_loop($base); | |
$GLOBALS['connections'] = array(); | |
$GLOBALS['buffers'] = array(); | |
function ev_accept($socket, $flag, $base) { | |
static $id = 0; | |
$connection = stream_socket_accept($socket); | |
stream_set_blocking($connection, 0); | |
$id += 1; | |
$buffer = event_buffer_new($connection, 'ev_read', 'ev_write', 'ev_error', $id); | |
event_buffer_base_set($buffer, $base); | |
event_buffer_timeout_set($buffer, 30, 30); | |
event_buffer_watermark_set($buffer, EV_READ, 0, 0xffffff); | |
event_buffer_priority_set($buffer, 10); | |
event_buffer_enable($buffer, EV_READ | EV_PERSIST); | |
event_buffer_set_callback($buffer, 'ev_read', 'ev_write', 'ev_error'); | |
// we need to save both buffer and connection outside | |
$GLOBALS['connections'][$id] = $connection; | |
$GLOBALS['buffers'][$id] = $buffer; | |
} | |
function ev_error($buffer, $error, $id) { | |
event_buffer_disable($GLOBALS['buffers'][$id], EV_READ | EV_WRITE); | |
event_buffer_free($GLOBALS['buffers'][$id]); | |
fclose($GLOBALS['connections'][$id]); | |
unset($GLOBALS['buffers'][$id], $GLOBALS['connections'][$id]); | |
} | |
function ev_write($buffer, $id) { | |
$mysqli = new mysqli('localhost', 'root', 'pass', 'movies'); | |
/* If we have to retrieve large amount of data we use MYSQLI_USE_RESULT */ | |
if ($result = $mysqli->query("SELECT * FROM movies_movie", MYSQLI_STORE_RESULT)) { | |
while ($row = $result->fetch_assoc()) { | |
//printf ("%s (%s)\n", $row["id"], $row["title"]); | |
} | |
$result->close(); | |
} | |
$mysqli->close(); | |
echo microtime(1), " do it write", PHP_EOL; | |
// Close | |
//event_buffer_disable($GLOBALS['buffers'][$id], EV_READ | EV_WRITE); | |
//event_buffer_free($GLOBALS['buffers'][$id]); | |
//fclose($GLOBALS['connections'][$id]); | |
//unset($GLOBALS['buffers'][$id], $GLOBALS['connections'][$id]); | |
} | |
function ev_read($buffer, $id) { | |
while ($read = event_buffer_read($buffer, 256)) { | |
//var_dump($read); | |
} | |
event_buffer_write($buffer, "HTTP/1.1 200 OK"); | |
event_buffer_write($buffer, | |
"\r\nContent-Type:text/html" . | |
"\r\nContent-Length: 4" . | |
"\r\n\r\nPONG"); | |
} | |
?> |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment