Skip to content

Instantly share code, notes, and snippets.

@joseph-montanez
Created August 3, 2011 15:57
Show Gist options
  • Star 0 You must be signed in to star a gist
  • Fork 0 You must be signed in to fork a gist
  • Save joseph-montanez/1122992 to your computer and use it in GitHub Desktop.
Save joseph-montanez/1122992 to your computer and use it in GitHub Desktop.
Possible coment style chat?
<?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