mirror of
https://github.com/danog/ext-uv.git
synced 2024-11-30 04:29:01 +01:00
constants: add several error codes. and add simple(?) http server example
This commit is contained in:
parent
9a55c5e270
commit
4bf5f591ed
68
examples/simple_http_server.php
Normal file
68
examples/simple_http_server.php
Normal file
@ -0,0 +1,68 @@
|
|||||||
|
<?php
|
||||||
|
$address = "::1";
|
||||||
|
$port = 8888;
|
||||||
|
|
||||||
|
|
||||||
|
$banner = <<<EOF
|
||||||
|
# # ##### ##### ##### ##### ##### ##### # # ##### #####
|
||||||
|
# # # # # # # # # # # # # # #
|
||||||
|
###### # # # # ##### ##### ##### ##### # # ##### #####
|
||||||
|
# # # # ##### # # # # # # # # #
|
||||||
|
# # # # # # # # # ## # # # # ##
|
||||||
|
# # # # # ##### ##### # # # ##### # #
|
||||||
|
|
||||||
|
http server started on port $port
|
||||||
|
|
||||||
|
EOF;
|
||||||
|
|
||||||
|
echo $banner;
|
||||||
|
|
||||||
|
$server = uv_tcp_init();
|
||||||
|
uv_tcp_bind6($server, uv_ip6_addr($address, $port));
|
||||||
|
|
||||||
|
$clients = array();
|
||||||
|
$parsers = array();
|
||||||
|
|
||||||
|
uv_listen($server, 511, function($server_stream) use (&$parsers, &$clients){
|
||||||
|
$client = uv_tcp_init();
|
||||||
|
uv_accept($server_stream, $client);
|
||||||
|
|
||||||
|
$clients[(int)$client] = $client;
|
||||||
|
$parsers[(int)$client] = uv_http_parser_init();
|
||||||
|
|
||||||
|
uv_read_start($client, function($client, $nread, $buffer) use (&$parsers, &$clients){
|
||||||
|
if ($nread < 0) {
|
||||||
|
uv_shutdown($client, function($client){
|
||||||
|
uv_close($client, function($client) use (&$parsers, &$clients){
|
||||||
|
unset($parsers[(int)$client]);
|
||||||
|
unset($clients[(int)$client]);
|
||||||
|
});
|
||||||
|
});
|
||||||
|
} else if ($nread == 0) {
|
||||||
|
if (uv_last_error() == UV::EOF) {
|
||||||
|
uv_shutdown($client, function($client) use (&$parsers, &$clients){
|
||||||
|
uv_close($client, function($client) use (&$parsers, &$clients){
|
||||||
|
unset($parsers[(int)$client]);
|
||||||
|
unset($clients[(int)$client]);
|
||||||
|
});
|
||||||
|
});
|
||||||
|
}
|
||||||
|
} else {
|
||||||
|
$result = array();
|
||||||
|
if (uv_http_parser_execute($parsers[(int)$client], $buffer, $result)){
|
||||||
|
$response = "HTTP/1.1 200 OK\r\n\r\nHello World";
|
||||||
|
|
||||||
|
uv_write($client, $response, function($client) use (&$parsers, &$clients){
|
||||||
|
uv_close($client, function($client) use (&$parsers, &$clients){
|
||||||
|
unset($parsers[(int)$client]);
|
||||||
|
unset($clients[(int)$client]);
|
||||||
|
});
|
||||||
|
});
|
||||||
|
}
|
||||||
|
}
|
||||||
|
});
|
||||||
|
});
|
||||||
|
|
||||||
|
//require "debug_timer.php";
|
||||||
|
|
||||||
|
uv_run(uv_default_loop());
|
4
uv.c
4
uv.c
@ -118,6 +118,10 @@ static int php_uv_class_init(TSRMLS_D)
|
|||||||
zend_declare_class_constant_long(uv_class_entry, "PROCESS_WINDOWS_VERBATIM_ARGUMENTS", sizeof("PROCESS_WINDOWS_VERBATIM_ARGUMENTS")-1, UV_PROCESS_WINDOWS_VERBATIM_ARGUMENTS TSRMLS_CC);
|
zend_declare_class_constant_long(uv_class_entry, "PROCESS_WINDOWS_VERBATIM_ARGUMENTS", sizeof("PROCESS_WINDOWS_VERBATIM_ARGUMENTS")-1, UV_PROCESS_WINDOWS_VERBATIM_ARGUMENTS TSRMLS_CC);
|
||||||
zend_declare_class_constant_long(uv_class_entry, "PROCESS_DETACHED", sizeof("PROCESS_DETACHED")-1, UV_PROCESS_DETACHED TSRMLS_CC);
|
zend_declare_class_constant_long(uv_class_entry, "PROCESS_DETACHED", sizeof("PROCESS_DETACHED")-1, UV_PROCESS_DETACHED TSRMLS_CC);
|
||||||
|
|
||||||
|
#define PHP_UV_ERRNO_GEN(code_notused, name, msg_notused) zend_declare_class_constant_long(uv_class_entry, #name, sizeof(#name)-1, UV_##name TSRMLS_CC);
|
||||||
|
UV_ERRNO_MAP(PHP_UV_ERRNO_GEN)
|
||||||
|
#undef PHP_UV_ERRNO_GEN
|
||||||
|
|
||||||
return 0;
|
return 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
Loading…
Reference in New Issue
Block a user