Пример #1
0
 public function listen($options = array(), $listeningListener = '')
 {
     $default_options = array('port' => 1337, 'host' => '127.0.0.1', 'backlog' => 100);
     $options = array_merge($default_options, $options);
     $this->setPort($options['port']);
     $this->setHost($options['host']);
     $this->setBacklog($options['backlog']);
     $this->setListeningListener($listeningListener);
     $this->server = uv_tcp_init();
     //very tricky, must use $this->server, using local variable will lead to segmentation fault
     uv_tcp_bind($this->server, uv_ip4_addr($options['host'], $options['port']));
     $self = $this;
     uv_listen($this->server, $options['backlog'], function ($server) use($self) {
         $client = uv_tcp_init();
         uv_accept($server, $client);
         $socket = new \Phastlight\Module\NET\Socket();
         uv_read_start($client, function ($uvSocket, $nread, $buffer) use($self, $socket) {
             if ($nread > 0) {
                 $socket->setSocket($uvSocket);
                 call_user_func_array($self->getConnectionListener(), array($socket));
                 $socket->emit('data', $buffer);
             }
         });
     });
 }
Пример #2
0
 public function listen($port, $host = '127.0.0.1', $backlog = 100)
 {
     $this->port = $port;
     $this->host = $host;
     $self = $this;
     $system = $this->getSystem();
     $this->server = uv_tcp_init();
     $request = $self->getServerRequest();
     $response = $self->getServerResponse();
     $requestListener = $self->getRequestListener();
     uv_tcp_bind($this->server, uv_ip4_addr($host, $port));
     uv_listen($this->server, $backlog, function ($server) use($self, &$request, &$response, &$requestListener) {
         $client = uv_tcp_init();
         uv_accept($server, $client);
         uv_read_start($client, function ($socket, $nread, $buffer) use($self, &$request, &$response, &$requestListener) {
             $self->generateServerVariables($buffer, $socket);
             call_user_func_array($requestListener, array($request, $response));
             $status_code = $response->getStatusCode();
             $statusMessage = $response->getReasonPhrase();
             $headers = $response->getHeaders();
             $header = "";
             if (count($headers) > 0) {
                 foreach ($headers as $key => $val) {
                     $header .= $key . ": " . $val . "\r\n";
                 }
             }
             $output = $response->getData();
             $buffer = "HTTP/1.1 {$status_code} {$statusMessage}\r\n{$header}\r\n{$output}";
             uv_write($socket, $buffer);
             uv_close($socket);
         });
     });
 }
Пример #3
0
 public function listen($port)
 {
     printf("# server listened at {$port}\n");
     uv_tcp_nodelay($this->server, 1);
     uv_tcp_bind($this->server, uv_ip4_addr("0.0.0.0", $port));
     uv_listen($this->server, 511, array($this, "onConnect"));
     uv_run(uv_default_loop());
 }
Пример #4
0
 /**
  * Binds a server on the current socket
  *
  * @param ServerInterface $server
  * @return SocketInterface
  */
 public function bind(ServerInterface $server)
 {
     \uv_tcp_bind($server->getBackend(), $this->getBackend());
     return $this;
 }
Пример #5
0
<?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);
    });
});
$c = uv_tcp_init();
uv_tcp_connect($c, uv_ip4_addr('0.0.0.0', 9999), function ($client, $stat) {
    if ($stat == 0) {
        uv_write($client, "Hello", function ($socket, $stat) {
            uv_close($socket);
        });
    }
});
uv_run();