Interface to libuv for php.
git clone https://github.com/amphp/php-uv.git
cd php-uv
phpize
./configure
make
make install
# add `extension=uv.so` to your php.ini
Windows builds for stable PHP versions are available from PECL.
see examples and tests directory.
<?php
$tcp = uv_tcp_init();
uv_tcp_bind($tcp, uv_ip4_addr('0.0.0.0',8888));
uv_listen($tcp,100, function($server){
$client = uv_tcp_init();
uv_accept($server, $client);
var_dump(uv_tcp_getsockname($server));
uv_read_start($client, function($socket, $nread, $buffer){
var_dump($buffer);
uv_close($socket);
});
});
$c = uv_tcp_init();
uv_tcp_connect($c, uv_ip4_addr('0.0.0.0',8888), function($stream, $stat){
if ($stat == 0) {
uv_write($stream,"Hello",function($stream, $stat){
uv_close($stream);
});
}
});
uv_run();
- Shuhei Tanuma
- Bob Weinand
PHP License
decrement reference
resource $uv_t: uv resource handle.
*void *:
<?php
$tcp = uv_tcp_init();
uv_unref($tcp);
get last error code.
resource $uv_loop: uv loop handle
long $error_code: error code
<?php
$err = uv_last_error();
var_dump($err);
get error code name.
long $error_code: libuv error code
string $erorr_name: error name
<?php
$err = uv_last_error();
var_dump(uv_err_name($err));
get error message.
long $error_code: libuv error code
string $erorr_message: error message
<?php
$err = uv_last_error();
var_dump(uv_strerror($err));
increment reference count
resource $uv_handle: uv resource.
void:
<?php
$tcp = uv_tcp_init();
uv_ref($tcp);
- support uv_loop resource
run event loop
resource $uv_loopg: uv_loop resource
void:
<?php
$loop = uv_default_loop();
$async = uv_async_init($loop, function($async, $status){
var_dump(1);
uv_close($async);
});
uv_async_send($async);
uv_run();
delete specified loop resource.
resource $uv_loop: uv_loop resource
void:
binds a name to a socket.
resource $uv_tcp: uv_tcp resource
resource $uv_sockaddr: uv sockaddr4 resource.
void:
<?php
$tcp = uv_tcp_init();
uv_tcp_bind($tcp, uv_ip4_addr('0.0.0.0',9999));
uv_listen($tcp,100, function($server){
$client = uv_tcp_init();
uv_accept($server, $client);
var_dump(uv_tcp_getsockname($server));
uv_read_start($client, function($socket, $nread, $buffer) use ($server){
var_dump($buffer);
uv_close($socket);
uv_close($server);
});
});
binds a name to a socket.
resource $uv_tcp: uv_tcp resource
resource $uv_sockaddr: uv sockaddr6 resource.
void:
<?php
$tcp = uv_tcp_init();
uv_tcp_bind6($tcp, uv_ip6_addr('::1',9999));
uv_listen($tcp,100, function($server){
$client = uv_tcp_init();
uv_accept($server, $client);
var_dump(uv_tcp_getsockname($server));
uv_read_start($client, function($socket, $nread, $buffer) use ($server){
var_dump($buffer);
uv_close($socket);
uv_close($server);
});
});
send buffer to speicified uv resource.
resource $handle: uv resources (uv_tcp, uv_udp, uv_pipe ...etc.) string $data: buffer. callable $callback: callable variables. this callback expects (resource $handle, long $status)
void:
set Nagel's flags for specified tcp resource.
resource $handle: libuv tcp resource
bool $enable: true means enabled. false means disabled.
void:
<?php
$tcp = uv_tcp_init();
uv_tcp_nodelay($tcp, true);
accepts a connection on a socket.
resource $uv: uv_tcp or uv_pipe server resource
resource $uv: uv_tcp or uv_pipe client resource.
void:
<?php
$tcp = uv_tcp_init();
uv_tcp_bind($tcp, uv_ip4_addr('0.0.0.0',9999));
uv_listen($tcp,100, function($server){
$client = uv_tcp_init();
uv_accept($server, $client);
var_dump(uv_tcp_getsockname($server));
uv_read_start($client, function($socket, $nread, $buffer) use ($server){
var_dump($buffer);
uv_close($socket);
uv_close($server);
});
});
shutdown uv handle.
resource $handle: uv resources (uv_tcp, uv_udp, uv_pipe ...etc.) callable $callback: callable variables. this callback expects (resource $handle, long $status)
void:
close uv handle.
resource $handle: uv resources (uv_tcp, uv_udp, uv_pipe ...etc.) callable $callback: callable variables. this callback expects (resource $handle, long $status)
void:
starts read callback for uv resources.
resource $handle: uv resources (uv_tcp, uv_udp, uv_pipe ...etc.)
callable $callback: callable variables. this callback parameter expects (resource $handle, long $nread, string buffer)
void:
- You have to handle erorrs correctly. otherwise this will leak.
- if you want to use PHP's stream or socket resource. see uv_fs_poll_init and uv_fs_read.
stop read callback
resource $uv: uv resource handle which started uv_read.
void:
<?php
$tcp = uv_tcp_init();
uv_tcp_bind($tcp, uv_ip4_addr('0.0.0.0',9999));
uv_listen($tcp,100, function($server){
$client = uv_tcp_init();
uv_accept($server, $client);
var_dump(uv_tcp_getsockname($server));
uv_read_start($client, function($socket, $nread, $buffer) use ($server){
uv_read_stop($socket);
var_dump($buffer);
uv_close($socket);
uv_close($server);
});
});
create a ipv4 sockaddr.
string $ipv4_addr: ipv4 address
long $port: port number.
resource $uv_sockaddr: sockaddr resource
<?php
$sockaddr = uv_ip4_addr("127.0.0.1", 8080);
- check passed ip address is valid.
- check port number is valid
create a ipv6 sockaddr.
string $ipv6_addr: ipv6 address
long $port: port number.
resource $uv_sockaddr: sockaddr resource
<?php
$sockaddr = uv_ip6_addr("::1", 8080);
- check passed ip address is valid.
- check port number is valid
listens for a connection on a uv handle.
resource $handle: uv resource handle (tcp, udp and pipe)
long $backlog: backlog
callable $callback: this callback parameter expects (resource $connection, long $status)
*void *:
<?php
$tcp = uv_tcp_init();
uv_tcp_bind($tcp, uv_ip4_addr('0.0.0.0',9999));
uv_listen($tcp,100, function($server, $status){
$client = uv_tcp_init();
uv_accept($server, $client);
uv_read_start($client, function($socket, $nread, $buffer) use ($server){
var_dump($buffer);
uv_close($socket);
uv_close($server);
});
});
uv_run();
connect to specified ip address and port.
resource $handle: requires uv_tcp_init()
resource.
resource $ipv4_addr: requires uv_sockaddr resource.
callable $callback: callable variables.
void:
<?php
$tcp = uv_tcp_init();
uv_tcp_connect($tcp, uv_ip4_addr("127.0.0.1",8080), function($tcp_handle, $status){
uv_close($tcp_handle);
});
uv_run();
connect to specified ip address and port.
resource $handle: requires uv_tcp_init()
resource.
resource $ipv4_addr: requires uv_sockaddr resource.
callable $callback: callable variables.
void:
<?php
$tcp = uv_tcp_init();
uv_tcp_connect($tcp, uv_ip6_addr("::1",8080), function($tcp_handle, $status){
uv_close($tcp_handle);
});
uv_run();
initialize timer handle.
resource $loop: uv_loop resource.
resource $timer: initialized timer resource.
<?php
$timer = uv_timer_init();
initialize timer handle.
resource $loop: uv_loop resource.
long $timeout: periodical event starts when after this timeout. 1000 is 1 sec.
long $repeat: repeat interval. 1000 is 1 sec.
*void:
<?php
$timer = uv_timer_init();
$after_1_second = 1000;
$period_is_1_second = 1000;
uv_timer_start($timer, $after_1_seconds, $period_is_1_second, function($timer, $status){
echo "Hello\n";
});
uv_run();
stop specified timer.
resource $timer: uv timer resource.
long $retval:
<?php
$timer = uv_timer_init();
uv_timer_start($timer, 100, 100, function($timer, $status){
echo "Hello\n";
uv_timer_stop($timer);
});
uv_run();
restart timer.
resource $timer: uv_timer resource.
void:
set repeat count.
resource $uv_timer: uv_timer resource
long $repeat: repeat count
void:
returns repeat interval.
resource $uv_timer: uv_timer resource
long $repeat_time:
initialize uv idle handle.
resource $loop: uv_loop resource.
resource $idle: initialized idle handle.
<?php
$loop = uv_default_loop();
$idle = uv_idle_init($loop);
start idle callback.
resource $idle: uv_idle resource. callable $callback: idle callback.
long result:
<?php
$loop = uv_default_loop();
$idle = uv_idle_init();
$i = 0;
uv_idle_start($idle, function($idle_handle, $stat) use (&$i){
echo "count: {$i}" . PHP_EOL;
$i++;
if ($i > 3) {
uv_idle_stop($idle);
}
sleep(1);
});
uv_run();
stop idle callback.
resource $idle: uv_idle resource.
long result:
<?php
$loop = uv_default_loop();
$idle = uv_idle_init();
$i = 0;
uv_idle_start($idle, function($idle_handle, $stat) use (&$i){
echo "count: {$i}" . PHP_EOL;
$i++;
if ($i > 3) {
uv_idle_stop($idle);
}
sleep(1);
});
uv_run();
void uv_getaddrinfo(resource $loop, callable $callback, string $node, string $service, array $hints)
create a tcp socket.
resource $loop: loop resource or null. if not specified loop resource then use uv_default_loop resource.
resource php_uv: uv resource which initialized for tcp.
<?php
$tcp = uv_tcp_init();
return default loop handle.
resource $loop:
<?php
$loop = uv_default_loop();
create a new loop handle.
resource $loop:
<?php
$loop = uv_loop_new();
create a udp socket.
resource $loop: loop resource or null. if not specified loop resource then use uv_default_loop resource.
resource php_uv: uv resource which initialized for udp.
<?php
$udp = uv_udp_init();
listens for a connection on a uv udp handle.
resource $handle: uv resource handle (udp)
resource $uv_ip_addr: uv sockaddr(ipv4) resource.
long $flags: unused.
*void *:
<?php
$udp = uv_udp_init();
var_dump($udp);
uv_udp_bind($udp, uv_ip4_addr('0.0.0.0',10000));
uv_udp_recv_start($udp,function($stream, $nread, $buffer){
echo "recv:" . $buffer;
uv_close($stream);
});
$uv = uv_udp_init();
uv_udp_send($uv, "Hello", uv_ip4_addr("0.0.0.0",10000),function($uv, $s){
echo "success" . PHP_EOL;
uv_close($uv);
});
uv_run();
listens for a connection on a uv udp handle.
resource $handle: uv resource handle (udp)
resource $uv_ip_addr: uv sockaddr(ipv6) resource.
long $flags: Should be 0 or UV::UDP_IPV6ONLY
*void *:
<?php
$udp = uv_udp_init();
var_dump($udp);
uv_udp_bind6($udp, uv_ip6_addr('::1',10000));
uv_udp_recv_start($udp,function($stream, $nread, $buffer){
echo "recv:" . $buffer;
uv_close($stream);
});
$uv = uv_udp_init();
uv_udp_send6($uv, "Hello", uv_ip6_addr("::1",10000),function($uv, $s){
echo "success" . PHP_EOL;
uv_close($uv);
});
uv_run();
start receive callback.
resource $handle: uv resource handle (udp)
callable $callback: this callback parameter expects (resource $stream, long $nread, string $buffer).
*void *:
<?php
$udp = uv_udp_init();
var_dump($udp);
uv_udp_bind6($udp, uv_ip6_addr('::1',10000));
uv_udp_recv_start($udp,function($stream, $nread, $buffer){
echo "recv:" . $buffer;
uv_close($stream);
});
$uv = uv_udp_init();
uv_udp_send6($uv, "Hello", uv_ip6_addr("::1",10000),function($uv, $s){
echo "success" . PHP_EOL;
uv_close($uv);
});
uv_run();
stop receive callback.
resource $handle: uv resource handle (udp)
*void *:
long uv_udp_set_membership(resource $handle, string $multicast_addr, string $interface_addr, long $membership)
join or leave udp muticast group..
resource $handle: uv resource handle (udp)
string $multicast_addr: multicast address
string $interface_addr: interface address
long $membership: UV::JOIN_GROUP or UV::LEAVE_GROUP
*long *: result code
set multicast loop
resource $handle: uv resource handle (udp)
long $enabled:
void:
set multicast ttl
resource $handle: uv resource handle (udp)
long $ttl: multicast ttl
void:
set udp broadcast
resource $handle: uv resource handle (udp)
long $enabled:
void:
send buffer to specified address.
resource $handle: uv resource handle (udp)
string $data: data
resource uv_addr: uv_ip4_addr
callable $callback: this callback parameter expects (resource $stream, long $status).
*void *:
<?php
$udp = uv_udp_init();
var_dump($udp);
uv_udp_bind($udp, uv_ip4_addr('::1',10000));
uv_udp_recv_start($udp,function($stream, $nread, $buffer){
echo "recv:" . $buffer;
uv_close($stream);
});
$uv = uv_udp_init();
uv_udp_send($uv, "Hello", uv_ip4_addr("::1",10000),function($uv, $s){
echo "success" . PHP_EOL;
uv_close($uv);
});
uv_run();
send buffer to specified address.