Coder Social home page Coder Social logo

php_ext_uv's Introduction

php_ext_uv

Build Status

php_ext_uv is a libuv extension for PHP with high performance asynchronous I/O.

Feature highlights

  • Asynchronous TCP and UDP sockets

  • Asynchronous DNS resolution

  • Signal handling

  • SSL support

  • TLS SNI support

Build Requirement

  • autoconf
  • automake
  • check
  • pkg-config
  • pcre

Example

// TCP Echo Server
$loop = new UVLoop();
$server = new UVTcp($loop);
$server->listen($host, $port, function($server){
    $client = $server->accept();
    $client->setCallback(function($client, $recv){
        //on receive
        $client->write($recv);
    }, function($client, $status){
        //on data sent
        $client->close();
    }, function(){
        //on error maybe client disconnect.
        $client->close();
    });
});
$loop->run();
//SSL Echo Server
$loop = new UVLoop();
$server = new UVSSL($loop);
$server->setCert(file_get_contents("server.crt"));    //PEM format
$server->setPrivateKey(file_get_contents("server.key"));  //PEM format
$server->listen($host, $port, function($server){
    $client = $server->accept();
    $client->setSSLHandshakeCallback(function($client){
        echo "ssl handshake ok\n";
    });
    $client->setCallback(function($client, $recv){
        //on receive if ssl handshake finished.
        //otherwise you won't receive any data before ssl handshake finished
        $client->write($recv);
    }, function($client, $status){
        //on data sent
        $client->close();
    }, function(){
        //on error maybe client disconnect.
        $client->close();
    });
});
$loop->run();

Server Name Indication(SNI)

//SSL Echo Server with SNI support
//SNI is an extension to the TLS 
$loop = new UVLoop();
$server = new UVSSL($loop, UVSSL::SSL_METHOD_TLSV1, 2); //with 2 certs
$server->setCert(file_get_contents("server0.crt"), 0);    //PEM format cert 0
$server->setPrivateKey(file_get_contents("server0.key"), 0);  //PEM format cert 0
$server->setCert(file_get_contents("server1.crt"), 1);    //PEM format cert 1
$server->setPrivateKey(file_get_contents("server1.key"), 1);  //PEM format cert 1
$server->setSSLServerNameCallback(function($servername){ //regist Server Name Indication callback
    if($servername == 'server1'){ 
        return 1; //use cert1
    } 
    return 0;  //default use cert0
});
$server->listen($host, $port, function($server){
    $client = $server->accept();
    $client->setSSLHandshakeCallback(function($client){
        echo "ssl handshake ok\n";
    });
    $client->setCallback(function($client, $recv){
        //on receive if ssl handshake finished.
        //otherwise you won't receive any data before ssl handshake finished
        $client->write($recv);
    }, function($client, $status){
        //on data sent
        $client->close();
    }, function(){
        //on error maybe client disconnect.
        $client->close();
    });
});
$loop->run();

LICENSE

This software is released under MIT License.

php_ext_uv's People

Contributors

rickysu avatar

Watchers

James Cloos avatar

Recommend Projects

  • React photo React

    A declarative, efficient, and flexible JavaScript library for building user interfaces.

  • Vue.js photo Vue.js

    ๐Ÿ–– Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.

  • Typescript photo Typescript

    TypeScript is a superset of JavaScript that compiles to clean JavaScript output.

  • TensorFlow photo TensorFlow

    An Open Source Machine Learning Framework for Everyone

  • Django photo Django

    The Web framework for perfectionists with deadlines.

  • D3 photo D3

    Bring data to life with SVG, Canvas and HTML. ๐Ÿ“Š๐Ÿ“ˆ๐ŸŽ‰

Recommend Topics

  • javascript

    JavaScript (JS) is a lightweight interpreted programming language with first-class functions.

  • web

    Some thing interesting about web. New door for the world.

  • server

    A server is a program made to process requests and deliver data to clients.

  • Machine learning

    Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.

  • Game

    Some thing interesting about game, make everyone happy.

Recommend Org

  • Facebook photo Facebook

    We are working to build community through open source technology. NB: members must have two-factor auth.

  • Microsoft photo Microsoft

    Open source projects and samples from Microsoft.

  • Google photo Google

    Google โค๏ธ Open Source for everyone.

  • D3 photo D3

    Data-Driven Documents codes.