Browse Source

Update amp (#5170)

* Update amp

* Update connection limit

* Add socket bind context
Bigger backlog, reuseport and tcpnodelay
Joan Miquel 5 years ago
parent
commit
0d05af135c

+ 5 - 5
frameworks/PHP/amp/amp.dockerfile

@@ -5,19 +5,19 @@ ARG DEBIAN_FRONTEND=noninteractive
 RUN apt-get update -yqq && apt-get install -yqq software-properties-common > /dev/null
 RUN LC_ALL=C.UTF-8 add-apt-repository ppa:ondrej/php
 RUN apt-get update -yqq > /dev/null && \
-    apt-get install -yqq git unzip php7.2 php7.2-common php7.2-cli php7.2-dev php7.2-mbstring composer curl build-essential > /dev/null
+    apt-get install -yqq git unzip php7.3 php7.3-common php7.3-cli php7.3-dev php7.3-mbstring composer curl build-essential > /dev/null
 
 # An extension is required!
 # We deal with concurrencies over 1k, which stream_select doesn't support.
 
-ADD ./install-ev.sh /install-ev.sh
-RUN /install-ev.sh > /dev/null
+RUN apt-get install -y php-pear php-dev libuv1-dev libuv1 > /dev/null
+RUN pecl install uv-0.2.4 > /dev/null
 
 ADD ./ /amp
 WORKDIR /amp
 
-COPY deploy/conf/* /etc/php/7.2/cli/conf.d/
+COPY deploy/conf/* /etc/php/7.3/cli/conf.d/
 
 RUN composer install --optimize-autoloader --classmap-authoritative --no-dev --quiet
 
-CMD php /amp/vendor/bin/cluster -s /amp/server.php
+CMD php /amp/vendor/bin/cluster /amp/server.php

+ 3 - 3
frameworks/PHP/amp/composer.json

@@ -1,8 +1,8 @@
 {
     "require": {
-        "amphp/cluster": "dev-master#8ba0a45aea1ac86b368254f0868ca3568744b679",
-        "amphp/http-server": "^0.8.2",
+        "amphp/cluster": "^1",
+        "amphp/http-server": "^2.0.0-rc2",
         "amphp/http-server-router": "^1",
-        "amphp/mysql": "^0.3"
+        "amphp/mysql": "dev-master#59086f7acc3151eea92e062ece6f21516aff28a5"
     }
 }

+ 0 - 1748
frameworks/PHP/amp/composer.lock

@@ -1,1748 +0,0 @@
-{
-    "_readme": [
-        "This file locks the dependencies of your project to a known state",
-        "Read more about it at https://getcomposer.org/doc/01-basic-usage.md#composer-lock-the-lock-file",
-        "This file is @generated automatically"
-    ],
-    "content-hash": "3bb2a266958d9be1f9efc24a2c736f34",
-    "packages": [
-        {
-            "name": "amphp/amp",
-            "version": "v2.0.7",
-            "source": {
-                "type": "git",
-                "url": "https://github.com/amphp/amp.git",
-                "reference": "d561cc9736bc18dd94a2fc9cdae98b616bd92c43"
-            },
-            "dist": {
-                "type": "zip",
-                "url": "https://api.github.com/repos/amphp/amp/zipball/d561cc9736bc18dd94a2fc9cdae98b616bd92c43",
-                "reference": "d561cc9736bc18dd94a2fc9cdae98b616bd92c43",
-                "shasum": ""
-            },
-            "require": {
-                "php": ">=7"
-            },
-            "require-dev": {
-                "amphp/phpunit-util": "^1",
-                "friendsofphp/php-cs-fixer": "^2.3",
-                "phpstan/phpstan": "^0.8.5",
-                "phpunit/phpunit": "^6.0.9",
-                "react/promise": "^2"
-            },
-            "type": "library",
-            "extra": {
-                "branch-alias": {
-                    "dev-master": "2.0.x-dev"
-                }
-            },
-            "autoload": {
-                "psr-4": {
-                    "Amp\\": "lib"
-                },
-                "files": [
-                    "lib/functions.php",
-                    "lib/Internal/functions.php"
-                ]
-            },
-            "notification-url": "https://packagist.org/downloads/",
-            "license": [
-                "MIT"
-            ],
-            "authors": [
-                {
-                    "name": "Bob Weinand",
-                    "email": "[email protected]"
-                },
-                {
-                    "name": "Niklas Keller",
-                    "email": "[email protected]"
-                },
-                {
-                    "name": "Daniel Lowrey",
-                    "email": "[email protected]"
-                },
-                {
-                    "name": "Aaron Piotrowski",
-                    "email": "[email protected]"
-                }
-            ],
-            "description": "A non-blocking concurrency framework for PHP applications.",
-            "homepage": "http://amphp.org/amp",
-            "keywords": [
-                "async",
-                "asynchronous",
-                "awaitable",
-                "concurrency",
-                "event",
-                "event-loop",
-                "future",
-                "non-blocking",
-                "promise"
-            ],
-            "time": "2018-04-30T20:49:57+00:00"
-        },
-        {
-            "name": "amphp/byte-stream",
-            "version": "v1.3.1",
-            "source": {
-                "type": "git",
-                "url": "https://github.com/amphp/byte-stream.git",
-                "reference": "1b75b122e6f069e7d102eef065dc192119d99ca7"
-            },
-            "dist": {
-                "type": "zip",
-                "url": "https://api.github.com/repos/amphp/byte-stream/zipball/1b75b122e6f069e7d102eef065dc192119d99ca7",
-                "reference": "1b75b122e6f069e7d102eef065dc192119d99ca7",
-                "shasum": ""
-            },
-            "require": {
-                "amphp/amp": "^2"
-            },
-            "require-dev": {
-                "amphp/phpunit-util": "^1",
-                "friendsofphp/php-cs-fixer": "^2.3",
-                "phpunit/phpunit": "^6"
-            },
-            "type": "library",
-            "autoload": {
-                "psr-4": {
-                    "Amp\\ByteStream\\": "lib"
-                },
-                "files": [
-                    "lib/functions.php"
-                ]
-            },
-            "notification-url": "https://packagist.org/downloads/",
-            "license": [
-                "MIT"
-            ],
-            "authors": [
-                {
-                    "name": "Niklas Keller",
-                    "email": "[email protected]"
-                },
-                {
-                    "name": "Aaron Piotrowski",
-                    "email": "[email protected]"
-                }
-            ],
-            "description": "A stream abstraction to make working with non-blocking I/O simple.",
-            "homepage": "http://amphp.org/byte-stream",
-            "keywords": [
-                "amp",
-                "amphp",
-                "async",
-                "io",
-                "non-blocking",
-                "stream"
-            ],
-            "time": "2018-04-04T05:33:09+00:00"
-        },
-        {
-            "name": "amphp/cache",
-            "version": "v1.2.0",
-            "source": {
-                "type": "git",
-                "url": "https://github.com/amphp/cache.git",
-                "reference": "ab2339e465d9d383dc748f288d530fd7cd7aadea"
-            },
-            "dist": {
-                "type": "zip",
-                "url": "https://api.github.com/repos/amphp/cache/zipball/ab2339e465d9d383dc748f288d530fd7cd7aadea",
-                "reference": "ab2339e465d9d383dc748f288d530fd7cd7aadea",
-                "shasum": ""
-            },
-            "require": {
-                "amphp/amp": "^2"
-            },
-            "require-dev": {
-                "amphp/phpunit-util": "^1",
-                "friendsofphp/php-cs-fixer": "^2.3",
-                "phpunit/phpunit": "^6"
-            },
-            "type": "library",
-            "autoload": {
-                "psr-4": {
-                    "Amp\\Cache\\": "lib"
-                }
-            },
-            "notification-url": "https://packagist.org/downloads/",
-            "license": [
-                "MIT"
-            ],
-            "authors": [
-                {
-                    "name": "Niklas Keller",
-                    "email": "[email protected]"
-                },
-                {
-                    "name": "Daniel Lowrey",
-                    "email": "[email protected]"
-                }
-            ],
-            "description": "A promise-aware caching API for Amp.",
-            "homepage": "https://github.com/amphp/cache",
-            "time": "2017-10-04T19:22:12+00:00"
-        },
-        {
-            "name": "amphp/cluster",
-            "version": "dev-master",
-            "source": {
-                "type": "git",
-                "url": "https://github.com/amphp/cluster.git",
-                "reference": "8ba0a45aea1ac86b368254f0868ca3568744b679"
-            },
-            "dist": {
-                "type": "zip",
-                "url": "https://api.github.com/repos/amphp/cluster/zipball/8ba0a45aea1ac86b368254f0868ca3568744b679",
-                "reference": "8ba0a45aea1ac86b368254f0868ca3568744b679",
-                "shasum": ""
-            },
-            "require": {
-                "amphp/amp": "^2",
-                "amphp/byte-stream": "^1.3",
-                "amphp/log": "^1",
-                "amphp/parallel": "^0.2.4",
-                "amphp/socket": "^0.10.8",
-                "league/climate": "^3",
-                "monolog/monolog": "^1.23",
-                "php": ">=7.0.7",
-                "psr/log": "^1"
-            },
-            "require-dev": {
-                "amphp/phpunit-util": "^1",
-                "friendsofphp/php-cs-fixer": "^2.3",
-                "infection/infection": "^0.7.1",
-                "phpunit/phpunit": "^6"
-            },
-            "suggest": {
-                "ext-sockets": "Required for socket transfer on systems that do not support SO_REUSEPORT"
-            },
-            "bin": [
-                "bin/cluster"
-            ],
-            "type": "library",
-            "autoload": {
-                "psr-4": {
-                    "Amp\\Cluster\\": "src"
-                },
-                "files": [
-                    "src/functions.php"
-                ]
-            },
-            "notification-url": "https://packagist.org/downloads/",
-            "license": [
-                "MIT"
-            ],
-            "authors": [
-                {
-                    "name": "Niklas Keller",
-                    "email": "[email protected]"
-                },
-                {
-                    "name": "Daniel Lowrey",
-                    "email": "[email protected]"
-                },
-                {
-                    "name": "Bob Weinand"
-                },
-                {
-                    "name": "Aaron Piotrowski",
-                    "email": "[email protected]"
-                }
-            ],
-            "description": "Cluster",
-            "homepage": "https://github.com/amphp/cluster",
-            "keywords": [
-                "amp",
-                "amphp",
-                "async",
-                "cluster",
-                "multi-process",
-                "non-blocking",
-                "parallel"
-            ],
-            "time": "2018-04-05T21:54:27+00:00"
-        },
-        {
-            "name": "amphp/dns",
-            "version": "v0.9.13",
-            "source": {
-                "type": "git",
-                "url": "https://github.com/amphp/dns.git",
-                "reference": "4647e5f58263ffdeff7da5c269f517cb48cff84f"
-            },
-            "dist": {
-                "type": "zip",
-                "url": "https://api.github.com/repos/amphp/dns/zipball/4647e5f58263ffdeff7da5c269f517cb48cff84f",
-                "reference": "4647e5f58263ffdeff7da5c269f517cb48cff84f",
-                "shasum": ""
-            },
-            "require": {
-                "amphp/amp": "^2",
-                "amphp/byte-stream": "^1.1",
-                "amphp/cache": "^1.2",
-                "amphp/file": "^0.2 || ^0.3",
-                "amphp/parser": "^1",
-                "amphp/uri": "^0.1",
-                "amphp/windows-registry": "^0.3",
-                "daverandom/libdns": "^2.0.1",
-                "ext-filter": "*",
-                "php": ">=7.0"
-            },
-            "require-dev": {
-                "amphp/phpunit-util": "^1",
-                "friendsofphp/php-cs-fixer": "^2.3",
-                "phpunit/phpunit": "^6"
-            },
-            "type": "library",
-            "autoload": {
-                "psr-4": {
-                    "Amp\\Dns\\": "lib"
-                },
-                "files": [
-                    "lib/functions.php"
-                ]
-            },
-            "notification-url": "https://packagist.org/downloads/",
-            "license": [
-                "MIT"
-            ],
-            "authors": [
-                {
-                    "name": "Bob Weinand",
-                    "email": "[email protected]"
-                },
-                {
-                    "name": "Niklas Keller",
-                    "email": "[email protected]"
-                },
-                {
-                    "name": "Daniel Lowrey",
-                    "email": "[email protected]"
-                },
-                {
-                    "name": "Chris Wright",
-                    "email": "[email protected]"
-                },
-                {
-                    "name": "Aaron Piotrowski",
-                    "email": "[email protected]"
-                }
-            ],
-            "description": "Async DNS resolution for Amp.",
-            "homepage": "https://github.com/amphp/dns",
-            "keywords": [
-                "amp",
-                "amphp",
-                "async",
-                "client",
-                "dns",
-                "resolve"
-            ],
-            "time": "2018-05-01T18:08:54+00:00"
-        },
-        {
-            "name": "amphp/file",
-            "version": "v0.3.1",
-            "source": {
-                "type": "git",
-                "url": "https://github.com/amphp/file.git",
-                "reference": "7bb476921b67cd7da361cf0d6bf9d80ec130421d"
-            },
-            "dist": {
-                "type": "zip",
-                "url": "https://api.github.com/repos/amphp/file/zipball/7bb476921b67cd7da361cf0d6bf9d80ec130421d",
-                "reference": "7bb476921b67cd7da361cf0d6bf9d80ec130421d",
-                "shasum": ""
-            },
-            "require": {
-                "amphp/amp": "^2",
-                "amphp/byte-stream": "^1",
-                "amphp/parallel": "^0.2"
-            },
-            "require-dev": {
-                "amphp/phpunit-util": "^1",
-                "friendsofphp/php-cs-fixer": "^2.3",
-                "phpunit/phpunit": "^6"
-            },
-            "type": "library",
-            "autoload": {
-                "psr-4": {
-                    "Amp\\File\\": "lib"
-                },
-                "files": [
-                    "lib/functions.php"
-                ]
-            },
-            "notification-url": "https://packagist.org/downloads/",
-            "license": [
-                "MIT"
-            ],
-            "authors": [
-                {
-                    "name": "Niklas Keller",
-                    "email": "[email protected]"
-                },
-                {
-                    "name": "Daniel Lowrey",
-                    "email": "[email protected]"
-                },
-                {
-                    "name": "Aaron Piotrowski",
-                    "email": "[email protected]"
-                }
-            ],
-            "description": "Allows non-blocking access to the filesystem for Amp.",
-            "homepage": "https://github.com/amphp/file",
-            "keywords": [
-                "amp",
-                "amphp",
-                "async",
-                "disk",
-                "file",
-                "filesystem",
-                "io",
-                "non-blocking",
-                "static"
-            ],
-            "time": "2018-03-17T12:24:35+00:00"
-        },
-        {
-            "name": "amphp/hpack",
-            "version": "v1.0.0",
-            "source": {
-                "type": "git",
-                "url": "https://github.com/amphp/hpack.git",
-                "reference": "f2b2dbfb5e6221bc9fe9350512e4971959b10ae6"
-            },
-            "dist": {
-                "type": "zip",
-                "url": "https://api.github.com/repos/amphp/hpack/zipball/f2b2dbfb5e6221bc9fe9350512e4971959b10ae6",
-                "reference": "f2b2dbfb5e6221bc9fe9350512e4971959b10ae6",
-                "shasum": ""
-            },
-            "require": {
-                "php": ">=7"
-            },
-            "require-dev": {
-                "friendsofphp/php-cs-fixer": "^2.3",
-                "http2jp/hpack-test-case": "^1",
-                "phpunit/phpunit": "^6"
-            },
-            "type": "library",
-            "autoload": {
-                "psr-4": {
-                    "Amp\\Http\\": "src"
-                }
-            },
-            "notification-url": "https://packagist.org/downloads/",
-            "license": [
-                "MIT"
-            ],
-            "authors": [
-                {
-                    "name": "Niklas Keller",
-                    "email": "[email protected]"
-                },
-                {
-                    "name": "Daniel Lowrey",
-                    "email": "[email protected]"
-                },
-                {
-                    "name": "Bob Weinand"
-                },
-                {
-                    "name": "Aaron Piotrowski",
-                    "email": "[email protected]"
-                }
-            ],
-            "description": "HTTP/2 HPack implementation.",
-            "homepage": "https://github.com/amphp/hpack",
-            "keywords": [
-                "headers",
-                "hpack",
-                "http-2"
-            ],
-            "time": "2018-03-13T14:40:49+00:00"
-        },
-        {
-            "name": "amphp/http",
-            "version": "v1.0.1",
-            "source": {
-                "type": "git",
-                "url": "https://github.com/amphp/http.git",
-                "reference": "16e465fa82555104d1cff98cb8e412295a380214"
-            },
-            "dist": {
-                "type": "zip",
-                "url": "https://api.github.com/repos/amphp/http/zipball/16e465fa82555104d1cff98cb8e412295a380214",
-                "reference": "16e465fa82555104d1cff98cb8e412295a380214",
-                "shasum": ""
-            },
-            "require-dev": {
-                "friendsofphp/php-cs-fixer": "^2.10",
-                "phpunit/phpunit": "^6.5"
-            },
-            "type": "library",
-            "autoload": {
-                "psr-4": {
-                    "Amp\\Http\\": "src"
-                }
-            },
-            "notification-url": "https://packagist.org/downloads/",
-            "license": [
-                "MIT"
-            ],
-            "authors": [
-                {
-                    "name": "Niklas Keller",
-                    "email": "[email protected]"
-                }
-            ],
-            "description": "Basic HTTP primitives which can be shared by servers and clients.",
-            "time": "2018-03-15T17:24:53+00:00"
-        },
-        {
-            "name": "amphp/http-server",
-            "version": "v0.8.2",
-            "source": {
-                "type": "git",
-                "url": "https://github.com/amphp/http-server.git",
-                "reference": "76c516cc2ebe37f277c89eecedbf445afa862d6c"
-            },
-            "dist": {
-                "type": "zip",
-                "url": "https://api.github.com/repos/amphp/http-server/zipball/76c516cc2ebe37f277c89eecedbf445afa862d6c",
-                "reference": "76c516cc2ebe37f277c89eecedbf445afa862d6c",
-                "shasum": ""
-            },
-            "require": {
-                "amphp/amp": "^2",
-                "amphp/byte-stream": "^1.3",
-                "amphp/hpack": "^1",
-                "amphp/http": "^1",
-                "amphp/socket": "^0.10.7",
-                "cash/lrucache": "^1.0",
-                "league/uri-parser": "^1.3",
-                "league/uri-schemes": "^1.1",
-                "psr/http-message": "^1",
-                "psr/log": "^1"
-            },
-            "require-dev": {
-                "amphp/artax": "^3",
-                "amphp/log": "^1",
-                "amphp/phpunit-util": "^1",
-                "friendsofphp/php-cs-fixer": "^2.3",
-                "infection/infection": "^0.7.1",
-                "league/uri-components": "^1.7",
-                "monolog/monolog": "^1.23",
-                "phpunit/phpunit": "^6"
-            },
-            "type": "library",
-            "autoload": {
-                "psr-4": {
-                    "Amp\\Http\\Server\\": "src"
-                },
-                "files": [
-                    "src/Middleware/functions.php"
-                ]
-            },
-            "notification-url": "https://packagist.org/downloads/",
-            "license": [
-                "MIT"
-            ],
-            "authors": [
-                {
-                    "name": "Niklas Keller",
-                    "email": "[email protected]"
-                },
-                {
-                    "name": "Daniel Lowrey",
-                    "email": "[email protected]"
-                },
-                {
-                    "name": "Bob Weinand"
-                },
-                {
-                    "name": "Aaron Piotrowski",
-                    "email": "[email protected]"
-                }
-            ],
-            "description": "A non-blocking HTTP application server for PHP based on Amp.",
-            "homepage": "https://github.com/amphp/http-server",
-            "keywords": [
-                "amp",
-                "amphp",
-                "async",
-                "http",
-                "non-blocking",
-                "server"
-            ],
-            "time": "2018-04-07T20:38:56+00:00"
-        },
-        {
-            "name": "amphp/http-server-router",
-            "version": "v1.0.0",
-            "source": {
-                "type": "git",
-                "url": "https://github.com/amphp/http-server-router.git",
-                "reference": "49dc4ce491179457a9c412090a42c3fb6507b39f"
-            },
-            "dist": {
-                "type": "zip",
-                "url": "https://api.github.com/repos/amphp/http-server-router/zipball/49dc4ce491179457a9c412090a42c3fb6507b39f",
-                "reference": "49dc4ce491179457a9c412090a42c3fb6507b39f",
-                "shasum": ""
-            },
-            "require": {
-                "amphp/http": "^1",
-                "amphp/http-server": "^0.8",
-                "cash/lrucache": "^1",
-                "nikic/fast-route": "^1"
-            },
-            "require-dev": {
-                "amphp/log": "^1",
-                "amphp/phpunit-util": "^1",
-                "friendsofphp/php-cs-fixer": "^2.3",
-                "league/uri-schemes": "^1.1",
-                "phpunit/phpunit": "^6"
-            },
-            "type": "library",
-            "autoload": {
-                "psr-4": {
-                    "Amp\\Http\\Server\\": "src"
-                }
-            },
-            "notification-url": "https://packagist.org/downloads/",
-            "license": [
-                "MIT"
-            ],
-            "authors": [
-                {
-                    "name": "Niklas Keller",
-                    "email": "[email protected]"
-                },
-                {
-                    "name": "Daniel Lowrey",
-                    "email": "[email protected]"
-                },
-                {
-                    "name": "Bob Weinand"
-                },
-                {
-                    "name": "Aaron Piotrowski",
-                    "email": "[email protected]"
-                }
-            ],
-            "description": "Router responder for Amp's HTTP server.",
-            "homepage": "https://github.com/amphp/http-server-router",
-            "keywords": [
-                "http",
-                "router",
-                "server"
-            ],
-            "time": "2018-03-26T18:42:38+00:00"
-        },
-        {
-            "name": "amphp/log",
-            "version": "v1.0.0",
-            "source": {
-                "type": "git",
-                "url": "https://github.com/amphp/log.git",
-                "reference": "728678d6e751abeb54a4d2fc6e76ef977de3f43b"
-            },
-            "dist": {
-                "type": "zip",
-                "url": "https://api.github.com/repos/amphp/log/zipball/728678d6e751abeb54a4d2fc6e76ef977de3f43b",
-                "reference": "728678d6e751abeb54a4d2fc6e76ef977de3f43b",
-                "shasum": ""
-            },
-            "require": {
-                "amphp/amp": "^2",
-                "amphp/byte-stream": "^1.3",
-                "monolog/monolog": "^1.23"
-            },
-            "require-dev": {
-                "amphp/file": "^0.3",
-                "amphp/phpunit-util": "^1",
-                "friendsofphp/php-cs-fixer": "^2.3",
-                "phpunit/phpunit": "^6"
-            },
-            "type": "library",
-            "autoload": {
-                "psr-4": {
-                    "Amp\\Log\\": "src"
-                },
-                "files": [
-                    "src/functions.php"
-                ]
-            },
-            "notification-url": "https://packagist.org/downloads/",
-            "license": [
-                "MIT"
-            ],
-            "authors": [
-                {
-                    "name": "Niklas Keller",
-                    "email": "[email protected]"
-                },
-                {
-                    "name": "Aaron Piotrowski",
-                    "email": "[email protected]"
-                }
-            ],
-            "description": "Non-blocking logging for PHP based on Amp and Monolog.",
-            "homepage": "https://github.com/amphp/log",
-            "keywords": [
-                "amp",
-                "amphp",
-                "async",
-                "log",
-                "logger",
-                "logging",
-                "non-blocking"
-            ],
-            "time": "2018-03-22T19:39:52+00:00"
-        },
-        {
-            "name": "amphp/mysql",
-            "version": "v0.3.1",
-            "source": {
-                "type": "git",
-                "url": "https://github.com/amphp/mysql.git",
-                "reference": "1f4a2229832b38eeb94154296c9f3cbcb4362b38"
-            },
-            "dist": {
-                "type": "zip",
-                "url": "https://api.github.com/repos/amphp/mysql/zipball/1f4a2229832b38eeb94154296c9f3cbcb4362b38",
-                "reference": "1f4a2229832b38eeb94154296c9f3cbcb4362b38",
-                "shasum": ""
-            },
-            "require": {
-                "amphp/amp": "^2",
-                "amphp/socket": "^0.10"
-            },
-            "require-dev": {
-                "amphp/phpunit-util": "^1",
-                "friendsofphp/php-cs-fixer": "^2.3",
-                "phpunit/phpunit": "^6"
-            },
-            "type": "library",
-            "autoload": {
-                "psr-4": {
-                    "Amp\\Mysql\\": "lib/"
-                },
-                "files": [
-                    "lib/functions.php"
-                ]
-            },
-            "notification-url": "https://packagist.org/downloads/",
-            "license": [
-                "MIT"
-            ],
-            "authors": [
-                {
-                    "name": "Bob Weinand",
-                    "email": "[email protected]"
-                },
-                {
-                    "name": "Aaron Piotrowski",
-                    "email": "[email protected]"
-                }
-            ],
-            "description": "Asynchronous parallel Mysql client built on the Amp concurrency framework",
-            "time": "2017-12-15T16:08:04+00:00"
-        },
-        {
-            "name": "amphp/parallel",
-            "version": "v0.2.5",
-            "source": {
-                "type": "git",
-                "url": "https://github.com/amphp/parallel.git",
-                "reference": "732694688461936bec02c0ccf020dfee10c4f7ee"
-            },
-            "dist": {
-                "type": "zip",
-                "url": "https://api.github.com/repos/amphp/parallel/zipball/732694688461936bec02c0ccf020dfee10c4f7ee",
-                "reference": "732694688461936bec02c0ccf020dfee10c4f7ee",
-                "shasum": ""
-            },
-            "require": {
-                "amphp/amp": "^2",
-                "amphp/byte-stream": "^1.2",
-                "amphp/parser": "^1",
-                "amphp/process": "^0.2 || ^0.3",
-                "amphp/sync": "^1.0.1"
-            },
-            "require-dev": {
-                "amphp/phpunit-util": "^1",
-                "friendsofphp/php-cs-fixer": "^2.3",
-                "phpunit/phpunit": "^6"
-            },
-            "suggest": {
-                "ext-pthreads": "Required for thread contexts"
-            },
-            "type": "library",
-            "autoload": {
-                "psr-4": {
-                    "Amp\\Parallel\\": "lib"
-                },
-                "files": [
-                    "lib/Worker/functions.php"
-                ]
-            },
-            "notification-url": "https://packagist.org/downloads/",
-            "license": [
-                "MIT"
-            ],
-            "authors": [
-                {
-                    "name": "Stephen Coakley",
-                    "email": "[email protected]"
-                },
-                {
-                    "name": "Aaron Piotrowski",
-                    "email": "[email protected]"
-                }
-            ],
-            "description": "Parallel processing component for Amp.",
-            "homepage": "https://github.com/amphp/parallel",
-            "keywords": [
-                "async",
-                "asynchronous",
-                "concurrent",
-                "multi-processing",
-                "multi-threading"
-            ],
-            "time": "2018-03-21T14:37:51+00:00"
-        },
-        {
-            "name": "amphp/parser",
-            "version": "v1.0.0",
-            "source": {
-                "type": "git",
-                "url": "https://github.com/amphp/parser.git",
-                "reference": "f83e68f03d5b8e8e0365b8792985a7f341c57ae1"
-            },
-            "dist": {
-                "type": "zip",
-                "url": "https://api.github.com/repos/amphp/parser/zipball/f83e68f03d5b8e8e0365b8792985a7f341c57ae1",
-                "reference": "f83e68f03d5b8e8e0365b8792985a7f341c57ae1",
-                "shasum": ""
-            },
-            "require": {
-                "php": ">=7"
-            },
-            "require-dev": {
-                "friendsofphp/php-cs-fixer": "^2.3",
-                "phpunit/phpunit": "^6"
-            },
-            "type": "library",
-            "autoload": {
-                "psr-4": {
-                    "Amp\\Parser\\": "lib"
-                }
-            },
-            "notification-url": "https://packagist.org/downloads/",
-            "license": [
-                "MIT"
-            ],
-            "authors": [
-                {
-                    "name": "Niklas Keller",
-                    "email": "[email protected]"
-                },
-                {
-                    "name": "Aaron Piotrowski",
-                    "email": "[email protected]"
-                }
-            ],
-            "description": "A generator parser to make streaming parsers simple.",
-            "homepage": "https://github.com/amphp/parser",
-            "keywords": [
-                "async",
-                "non-blocking",
-                "parser",
-                "stream"
-            ],
-            "time": "2017-06-06T05:29:10+00:00"
-        },
-        {
-            "name": "amphp/process",
-            "version": "v0.3.3",
-            "source": {
-                "type": "git",
-                "url": "https://github.com/amphp/process.git",
-                "reference": "b795d20a7f6d5a0637128a02be613f520f1705fc"
-            },
-            "dist": {
-                "type": "zip",
-                "url": "https://api.github.com/repos/amphp/process/zipball/b795d20a7f6d5a0637128a02be613f520f1705fc",
-                "reference": "b795d20a7f6d5a0637128a02be613f520f1705fc",
-                "shasum": ""
-            },
-            "require": {
-                "amphp/amp": "^2",
-                "amphp/byte-stream": "^1",
-                "php": ">=7"
-            },
-            "require-dev": {
-                "amphp/phpunit-util": "^1",
-                "friendsofphp/php-cs-fixer": "^2.3",
-                "phpunit/phpunit": "^6"
-            },
-            "type": "library",
-            "autoload": {
-                "psr-4": {
-                    "Amp\\Process\\": "lib"
-                },
-                "files": [
-                    "lib/constants.php"
-                ]
-            },
-            "notification-url": "https://packagist.org/downloads/",
-            "license": [
-                "MIT"
-            ],
-            "authors": [
-                {
-                    "name": "Bob Weinand",
-                    "email": "[email protected]"
-                },
-                {
-                    "name": "Niklas Keller",
-                    "email": "[email protected]"
-                },
-                {
-                    "name": "Aaron Piotrowski",
-                    "email": "[email protected]"
-                }
-            ],
-            "description": "Asynchronous process manager.",
-            "homepage": "https://github.com/amphp/process",
-            "time": "2018-04-08T18:55:42+00:00"
-        },
-        {
-            "name": "amphp/socket",
-            "version": "v0.10.8",
-            "source": {
-                "type": "git",
-                "url": "https://github.com/amphp/socket.git",
-                "reference": "2d78e0291e769b452903864b7b2ceb1b092433a4"
-            },
-            "dist": {
-                "type": "zip",
-                "url": "https://api.github.com/repos/amphp/socket/zipball/2d78e0291e769b452903864b7b2ceb1b092433a4",
-                "reference": "2d78e0291e769b452903864b7b2ceb1b092433a4",
-                "shasum": ""
-            },
-            "require": {
-                "amphp/amp": "^2",
-                "amphp/byte-stream": "^1.1",
-                "amphp/dns": "^0.9",
-                "amphp/uri": "^0.1",
-                "php": ">=7.0"
-            },
-            "require-dev": {
-                "amphp/phpunit-util": "^1",
-                "friendsofphp/php-cs-fixer": "^2.3",
-                "phpunit/phpunit": "^6"
-            },
-            "type": "library",
-            "autoload": {
-                "psr-4": {
-                    "Amp\\Socket\\": "src"
-                },
-                "files": [
-                    "src/functions.php",
-                    "src/Internal/functions.php"
-                ]
-            },
-            "notification-url": "https://packagist.org/downloads/",
-            "license": [
-                "MIT"
-            ],
-            "authors": [
-                {
-                    "name": "Niklas Keller",
-                    "email": "[email protected]"
-                },
-                {
-                    "name": "Daniel Lowrey",
-                    "email": "[email protected]"
-                },
-                {
-                    "name": "Aaron Piotrowski",
-                    "email": "[email protected]"
-                }
-            ],
-            "description": "Async socket connection / server tools for Amp.",
-            "homepage": "https://github.com/amphp/socket",
-            "keywords": [
-                "amp",
-                "async",
-                "encryption",
-                "non-blocking",
-                "sockets",
-                "tcp",
-                "tls"
-            ],
-            "time": "2018-03-23T18:55:37+00:00"
-        },
-        {
-            "name": "amphp/sync",
-            "version": "v1.0.1",
-            "source": {
-                "type": "git",
-                "url": "https://github.com/amphp/sync.git",
-                "reference": "a1d8f244eb19e3e2a96abc4686cebc80995bbc90"
-            },
-            "dist": {
-                "type": "zip",
-                "url": "https://api.github.com/repos/amphp/sync/zipball/a1d8f244eb19e3e2a96abc4686cebc80995bbc90",
-                "reference": "a1d8f244eb19e3e2a96abc4686cebc80995bbc90",
-                "shasum": ""
-            },
-            "require": {
-                "amphp/amp": "^2"
-            },
-            "require-dev": {
-                "amphp/phpunit-util": "^1",
-                "friendsofphp/php-cs-fixer": "^2.3",
-                "phpunit/phpunit": "^6"
-            },
-            "type": "library",
-            "autoload": {
-                "psr-4": {
-                    "Amp\\Sync\\": "lib"
-                },
-                "files": [
-                    "lib/functions.php"
-                ]
-            },
-            "notification-url": "https://packagist.org/downloads/",
-            "license": [
-                "MIT"
-            ],
-            "authors": [
-                {
-                    "name": "Stephen Coakley",
-                    "email": "[email protected]"
-                },
-                {
-                    "name": "Aaron Piotrowski",
-                    "email": "[email protected]"
-                }
-            ],
-            "description": "Mutex, Semaphore, and other synchronization tools for Amp.",
-            "homepage": "https://github.com/amphp/sync",
-            "keywords": [
-                "async",
-                "asynchronous",
-                "mutex",
-                "semaphore",
-                "synchronization"
-            ],
-            "time": "2017-11-29T21:48:53+00:00"
-        },
-        {
-            "name": "amphp/uri",
-            "version": "v0.1.3",
-            "source": {
-                "type": "git",
-                "url": "https://github.com/amphp/uri.git",
-                "reference": "b857ba4df3cf0852302ba1637fccce4ce1205241"
-            },
-            "dist": {
-                "type": "zip",
-                "url": "https://api.github.com/repos/amphp/uri/zipball/b857ba4df3cf0852302ba1637fccce4ce1205241",
-                "reference": "b857ba4df3cf0852302ba1637fccce4ce1205241",
-                "shasum": ""
-            },
-            "require-dev": {
-                "friendsofphp/php-cs-fixer": "^2.3",
-                "phpunit/phpunit": "^6"
-            },
-            "type": "library",
-            "autoload": {
-                "psr-4": {
-                    "Amp\\Uri\\": "src"
-                },
-                "files": [
-                    "src/functions.php"
-                ]
-            },
-            "notification-url": "https://packagist.org/downloads/",
-            "license": [
-                "MIT"
-            ],
-            "authors": [
-                {
-                    "name": "Niklas Keller",
-                    "email": "[email protected]"
-                },
-                {
-                    "name": "Daniel Lowrey"
-                }
-            ],
-            "description": "Uri Parser and Resolver.",
-            "homepage": "https://github.com/amphp/uri",
-            "time": "2017-10-23T12:40:35+00:00"
-        },
-        {
-            "name": "amphp/windows-registry",
-            "version": "v0.3.1",
-            "source": {
-                "type": "git",
-                "url": "https://github.com/amphp/windows-registry.git",
-                "reference": "46ba1463dfffc8081b4b483fac05d3f51ecb1d87"
-            },
-            "dist": {
-                "type": "zip",
-                "url": "https://api.github.com/repos/amphp/windows-registry/zipball/46ba1463dfffc8081b4b483fac05d3f51ecb1d87",
-                "reference": "46ba1463dfffc8081b4b483fac05d3f51ecb1d87",
-                "shasum": ""
-            },
-            "require": {
-                "amphp/amp": "^2",
-                "amphp/process": "^0.2 || ^0.3"
-            },
-            "require-dev": {
-                "friendsofphp/php-cs-fixer": "^2.3"
-            },
-            "type": "library",
-            "autoload": {
-                "psr-4": {
-                    "Amp\\WindowsRegistry\\": "lib"
-                }
-            },
-            "notification-url": "https://packagist.org/downloads/",
-            "license": [
-                "MIT"
-            ],
-            "authors": [
-                {
-                    "name": "Niklas Keller",
-                    "email": "[email protected]"
-                }
-            ],
-            "description": "Windows Registry Reader.",
-            "time": "2017-12-11T08:35:51+00:00"
-        },
-        {
-            "name": "cash/lrucache",
-            "version": "1.0.0",
-            "source": {
-                "type": "git",
-                "url": "https://github.com/cash/LRUCache.git",
-                "reference": "4fa4c6834cec59690b43526c4da41d6153026289"
-            },
-            "dist": {
-                "type": "zip",
-                "url": "https://api.github.com/repos/cash/LRUCache/zipball/4fa4c6834cec59690b43526c4da41d6153026289",
-                "reference": "4fa4c6834cec59690b43526c4da41d6153026289",
-                "shasum": ""
-            },
-            "require": {
-                "php": ">=5.3.0"
-            },
-            "type": "library",
-            "autoload": {
-                "psr-0": {
-                    "cash": "src/"
-                }
-            },
-            "notification-url": "https://packagist.org/downloads/",
-            "license": [
-                "MIT"
-            ],
-            "authors": [
-                {
-                    "name": "Cash Costello",
-                    "email": "[email protected]"
-                }
-            ],
-            "description": "An efficient memory-based Least Recently Used (LRU) cache",
-            "homepage": "https://github.com/cash/LRUCache",
-            "keywords": [
-                "cache",
-                "lru"
-            ],
-            "time": "2013-09-20T18:59:12+00:00"
-        },
-        {
-            "name": "daverandom/libdns",
-            "version": "v2.0.1",
-            "source": {
-                "type": "git",
-                "url": "https://github.com/DaveRandom/LibDNS.git",
-                "reference": "1ecd825b6fa9bb3fddc07751997e29dc78749b95"
-            },
-            "dist": {
-                "type": "zip",
-                "url": "https://api.github.com/repos/DaveRandom/LibDNS/zipball/1ecd825b6fa9bb3fddc07751997e29dc78749b95",
-                "reference": "1ecd825b6fa9bb3fddc07751997e29dc78749b95",
-                "shasum": ""
-            },
-            "require": {
-                "ext-ctype": "*",
-                "php": ">=7.0"
-            },
-            "suggest": {
-                "ext-intl": "Required for IDN support"
-            },
-            "type": "library",
-            "autoload": {
-                "psr-4": {
-                    "LibDNS\\": "src/"
-                },
-                "files": [
-                    "src/functions.php"
-                ]
-            },
-            "notification-url": "https://packagist.org/downloads/",
-            "license": [
-                "MIT"
-            ],
-            "description": "DNS protocol implementation written in pure PHP",
-            "keywords": [
-                "dns"
-            ],
-            "time": "2018-01-10T15:56:17+00:00"
-        },
-        {
-            "name": "league/climate",
-            "version": "3.4.1",
-            "source": {
-                "type": "git",
-                "url": "https://github.com/thephpleague/climate.git",
-                "reference": "d657a19837c1f79a891381fb128b755aa3386381"
-            },
-            "dist": {
-                "type": "zip",
-                "url": "https://api.github.com/repos/thephpleague/climate/zipball/d657a19837c1f79a891381fb128b755aa3386381",
-                "reference": "d657a19837c1f79a891381fb128b755aa3386381",
-                "shasum": ""
-            },
-            "require": {
-                "php": "^5.6|^7.0",
-                "psr/log": "^1.0",
-                "seld/cli-prompt": "^1.0"
-            },
-            "require-dev": {
-                "mikey179/vfsstream": "^1.4",
-                "mockery/mockery": "^1.0",
-                "phpunit/phpunit": "^5.7.16"
-            },
-            "suggest": {
-                "ext-mbstring": "If ext-mbstring is not available you MUST install symfony/polyfill-mbstring"
-            },
-            "type": "library",
-            "autoload": {
-                "psr-4": {
-                    "League\\CLImate\\": "src/"
-                }
-            },
-            "notification-url": "https://packagist.org/downloads/",
-            "license": [
-                "MIT"
-            ],
-            "authors": [
-                {
-                    "name": "Craig Duncan",
-                    "email": "[email protected]",
-                    "homepage": "https://github.com/duncan3dc",
-                    "role": "Developer"
-                },
-                {
-                    "name": "Joe Tannenbaum",
-                    "email": "[email protected]",
-                    "homepage": "http://joe.codes/",
-                    "role": "Developer"
-                }
-            ],
-            "description": "PHP's best friend for the terminal. CLImate allows you to easily output colored text, special formats, and more.",
-            "keywords": [
-                "cli",
-                "colors",
-                "command",
-                "php",
-                "terminal"
-            ],
-            "time": "2018-04-29T16:43:54+00:00"
-        },
-        {
-            "name": "league/uri-interfaces",
-            "version": "1.0.0",
-            "source": {
-                "type": "git",
-                "url": "https://github.com/thephpleague/uri-interfaces.git",
-                "reference": "dcc0be58e8b35a726274249e5eee053be1a56b66"
-            },
-            "dist": {
-                "type": "zip",
-                "url": "https://api.github.com/repos/thephpleague/uri-interfaces/zipball/dcc0be58e8b35a726274249e5eee053be1a56b66",
-                "reference": "dcc0be58e8b35a726274249e5eee053be1a56b66",
-                "shasum": ""
-            },
-            "require": {
-                "php": ">=5.3.0"
-            },
-            "require-dev": {
-                "friendsofphp/php-cs-fixer": "^1.0.0"
-            },
-            "type": "library",
-            "extra": {
-                "branch-alias": {
-                    "dev-master": "1.0.x-dev"
-                }
-            },
-            "autoload": {
-                "psr-4": {
-                    "League\\Uri\\Interfaces\\": "src/"
-                }
-            },
-            "notification-url": "https://packagist.org/downloads/",
-            "license": [
-                "MIT"
-            ],
-            "authors": [
-                {
-                    "name": "Ignace Nyamagana Butera",
-                    "email": "[email protected]",
-                    "homepage": "https://nyamsprod.com"
-                }
-            ],
-            "description": "Common interface for URI representation",
-            "homepage": "http://github.com/thephpleague/uri-interfaces",
-            "keywords": [
-                "rfc3986",
-                "rfc3987",
-                "uri",
-                "url"
-            ],
-            "time": "2017-01-04T08:02:42+00:00"
-        },
-        {
-            "name": "league/uri-parser",
-            "version": "1.4.0",
-            "source": {
-                "type": "git",
-                "url": "https://github.com/thephpleague/uri-parser.git",
-                "reference": "8beb28540744a5ad728aee7060100002f9196f46"
-            },
-            "dist": {
-                "type": "zip",
-                "url": "https://api.github.com/repos/thephpleague/uri-parser/zipball/8beb28540744a5ad728aee7060100002f9196f46",
-                "reference": "8beb28540744a5ad728aee7060100002f9196f46",
-                "shasum": ""
-            },
-            "require": {
-                "php": ">=7.0.0"
-            },
-            "require-dev": {
-                "friendsofphp/php-cs-fixer": "^2.0",
-                "phpstan/phpstan": "^0.9.2",
-                "phpstan/phpstan-phpunit": "^0.9.4",
-                "phpstan/phpstan-strict-rules": "^0.9.0",
-                "phpunit/phpunit": "^6.0"
-            },
-            "suggest": {
-                "ext-intl": "Allow parsing RFC3987 compliant hosts",
-                "league/uri-schemes": "Allow validating and normalizing URI parsing results"
-            },
-            "type": "library",
-            "extra": {
-                "branch-alias": {
-                    "dev-master": "1.x-dev"
-                }
-            },
-            "autoload": {
-                "psr-4": {
-                    "League\\Uri\\": "src"
-                },
-                "files": [
-                    "src/functions_include.php"
-                ]
-            },
-            "notification-url": "https://packagist.org/downloads/",
-            "license": [
-                "MIT"
-            ],
-            "authors": [
-                {
-                    "name": "Ignace Nyamagana Butera",
-                    "email": "[email protected]",
-                    "homepage": "https://nyamsprod.com"
-                }
-            ],
-            "description": "userland URI parser RFC 3986 compliant",
-            "homepage": "https://github.com/thephpleague/uri-parser",
-            "keywords": [
-                "parse_url",
-                "parser",
-                "rfc3986",
-                "rfc3987",
-                "uri",
-                "url"
-            ],
-            "time": "2018-03-13T21:13:33+00:00"
-        },
-        {
-            "name": "league/uri-schemes",
-            "version": "1.2.0",
-            "source": {
-                "type": "git",
-                "url": "https://github.com/thephpleague/uri-schemes.git",
-                "reference": "c26aedac0f60d1ce915aa309e1d08a4b09c7d708"
-            },
-            "dist": {
-                "type": "zip",
-                "url": "https://api.github.com/repos/thephpleague/uri-schemes/zipball/c26aedac0f60d1ce915aa309e1d08a4b09c7d708",
-                "reference": "c26aedac0f60d1ce915aa309e1d08a4b09c7d708",
-                "shasum": ""
-            },
-            "require": {
-                "ext-fileinfo": "*",
-                "league/uri-interfaces": "^1.0",
-                "league/uri-parser": "^1.4.0",
-                "php": ">=7.0.13",
-                "psr/http-message": "^1.0"
-            },
-            "require-dev": {
-                "friendsofphp/php-cs-fixer": "^2.0",
-                "phpstan/phpstan": "^0.9.2",
-                "phpstan/phpstan-phpunit": "^0.9.4",
-                "phpstan/phpstan-strict-rules": "^0.9.0",
-                "phpunit/phpunit": "^6.0"
-            },
-            "suggest": {
-                "ext-intl": "Allow parsing RFC3987 compliant hosts",
-                "league/uri-manipulations": "Needed to easily manipulate URI objects"
-            },
-            "type": "library",
-            "extra": {
-                "branch-alias": {
-                    "dev-master": "1.0.x-dev"
-                }
-            },
-            "autoload": {
-                "psr-4": {
-                    "League\\Uri\\": "src"
-                },
-                "files": [
-                    "src/functions_include.php"
-                ]
-            },
-            "notification-url": "https://packagist.org/downloads/",
-            "license": [
-                "MIT"
-            ],
-            "authors": [
-                {
-                    "name": "Ignace Nyamagana Butera",
-                    "email": "[email protected]",
-                    "homepage": "https://nyamsprod.com"
-                }
-            ],
-            "description": "URI manipulation library",
-            "homepage": "http://uri.thephpleague.com",
-            "keywords": [
-                "data-uri",
-                "file",
-                "ftp",
-                "http",
-                "https",
-                "parse_url",
-                "psr-7",
-                "rfc3986",
-                "uri",
-                "url",
-                "ws",
-                "wss"
-            ],
-            "time": "2018-03-14T08:33:20+00:00"
-        },
-        {
-            "name": "monolog/monolog",
-            "version": "1.23.0",
-            "source": {
-                "type": "git",
-                "url": "https://github.com/Seldaek/monolog.git",
-                "reference": "fd8c787753b3a2ad11bc60c063cff1358a32a3b4"
-            },
-            "dist": {
-                "type": "zip",
-                "url": "https://api.github.com/repos/Seldaek/monolog/zipball/fd8c787753b3a2ad11bc60c063cff1358a32a3b4",
-                "reference": "fd8c787753b3a2ad11bc60c063cff1358a32a3b4",
-                "shasum": ""
-            },
-            "require": {
-                "php": ">=5.3.0",
-                "psr/log": "~1.0"
-            },
-            "provide": {
-                "psr/log-implementation": "1.0.0"
-            },
-            "require-dev": {
-                "aws/aws-sdk-php": "^2.4.9 || ^3.0",
-                "doctrine/couchdb": "~1.0@dev",
-                "graylog2/gelf-php": "~1.0",
-                "jakub-onderka/php-parallel-lint": "0.9",
-                "php-amqplib/php-amqplib": "~2.4",
-                "php-console/php-console": "^3.1.3",
-                "phpunit/phpunit": "~4.5",
-                "phpunit/phpunit-mock-objects": "2.3.0",
-                "ruflin/elastica": ">=0.90 <3.0",
-                "sentry/sentry": "^0.13",
-                "swiftmailer/swiftmailer": "^5.3|^6.0"
-            },
-            "suggest": {
-                "aws/aws-sdk-php": "Allow sending log messages to AWS services like DynamoDB",
-                "doctrine/couchdb": "Allow sending log messages to a CouchDB server",
-                "ext-amqp": "Allow sending log messages to an AMQP server (1.0+ required)",
-                "ext-mongo": "Allow sending log messages to a MongoDB server",
-                "graylog2/gelf-php": "Allow sending log messages to a GrayLog2 server",
-                "mongodb/mongodb": "Allow sending log messages to a MongoDB server via PHP Driver",
-                "php-amqplib/php-amqplib": "Allow sending log messages to an AMQP server using php-amqplib",
-                "php-console/php-console": "Allow sending log messages to Google Chrome",
-                "rollbar/rollbar": "Allow sending log messages to Rollbar",
-                "ruflin/elastica": "Allow sending log messages to an Elastic Search server",
-                "sentry/sentry": "Allow sending log messages to a Sentry server"
-            },
-            "type": "library",
-            "extra": {
-                "branch-alias": {
-                    "dev-master": "2.0.x-dev"
-                }
-            },
-            "autoload": {
-                "psr-4": {
-                    "Monolog\\": "src/Monolog"
-                }
-            },
-            "notification-url": "https://packagist.org/downloads/",
-            "license": [
-                "MIT"
-            ],
-            "authors": [
-                {
-                    "name": "Jordi Boggiano",
-                    "email": "[email protected]",
-                    "homepage": "http://seld.be"
-                }
-            ],
-            "description": "Sends your logs to files, sockets, inboxes, databases and various web services",
-            "homepage": "http://github.com/Seldaek/monolog",
-            "keywords": [
-                "log",
-                "logging",
-                "psr-3"
-            ],
-            "time": "2017-06-19T01:22:40+00:00"
-        },
-        {
-            "name": "nikic/fast-route",
-            "version": "v1.3.0",
-            "source": {
-                "type": "git",
-                "url": "https://github.com/nikic/FastRoute.git",
-                "reference": "181d480e08d9476e61381e04a71b34dc0432e812"
-            },
-            "dist": {
-                "type": "zip",
-                "url": "https://api.github.com/repos/nikic/FastRoute/zipball/181d480e08d9476e61381e04a71b34dc0432e812",
-                "reference": "181d480e08d9476e61381e04a71b34dc0432e812",
-                "shasum": ""
-            },
-            "require": {
-                "php": ">=5.4.0"
-            },
-            "require-dev": {
-                "phpunit/phpunit": "^4.8.35|~5.7"
-            },
-            "type": "library",
-            "autoload": {
-                "psr-4": {
-                    "FastRoute\\": "src/"
-                },
-                "files": [
-                    "src/functions.php"
-                ]
-            },
-            "notification-url": "https://packagist.org/downloads/",
-            "license": [
-                "BSD-3-Clause"
-            ],
-            "authors": [
-                {
-                    "name": "Nikita Popov",
-                    "email": "[email protected]"
-                }
-            ],
-            "description": "Fast request router for PHP",
-            "keywords": [
-                "router",
-                "routing"
-            ],
-            "time": "2018-02-13T20:26:39+00:00"
-        },
-        {
-            "name": "psr/http-message",
-            "version": "1.0.1",
-            "source": {
-                "type": "git",
-                "url": "https://github.com/php-fig/http-message.git",
-                "reference": "f6561bf28d520154e4b0ec72be95418abe6d9363"
-            },
-            "dist": {
-                "type": "zip",
-                "url": "https://api.github.com/repos/php-fig/http-message/zipball/f6561bf28d520154e4b0ec72be95418abe6d9363",
-                "reference": "f6561bf28d520154e4b0ec72be95418abe6d9363",
-                "shasum": ""
-            },
-            "require": {
-                "php": ">=5.3.0"
-            },
-            "type": "library",
-            "extra": {
-                "branch-alias": {
-                    "dev-master": "1.0.x-dev"
-                }
-            },
-            "autoload": {
-                "psr-4": {
-                    "Psr\\Http\\Message\\": "src/"
-                }
-            },
-            "notification-url": "https://packagist.org/downloads/",
-            "license": [
-                "MIT"
-            ],
-            "authors": [
-                {
-                    "name": "PHP-FIG",
-                    "homepage": "http://www.php-fig.org/"
-                }
-            ],
-            "description": "Common interface for HTTP messages",
-            "homepage": "https://github.com/php-fig/http-message",
-            "keywords": [
-                "http",
-                "http-message",
-                "psr",
-                "psr-7",
-                "request",
-                "response"
-            ],
-            "time": "2016-08-06T14:39:51+00:00"
-        },
-        {
-            "name": "psr/log",
-            "version": "1.0.2",
-            "source": {
-                "type": "git",
-                "url": "https://github.com/php-fig/log.git",
-                "reference": "4ebe3a8bf773a19edfe0a84b6585ba3d401b724d"
-            },
-            "dist": {
-                "type": "zip",
-                "url": "https://api.github.com/repos/php-fig/log/zipball/4ebe3a8bf773a19edfe0a84b6585ba3d401b724d",
-                "reference": "4ebe3a8bf773a19edfe0a84b6585ba3d401b724d",
-                "shasum": ""
-            },
-            "require": {
-                "php": ">=5.3.0"
-            },
-            "type": "library",
-            "extra": {
-                "branch-alias": {
-                    "dev-master": "1.0.x-dev"
-                }
-            },
-            "autoload": {
-                "psr-4": {
-                    "Psr\\Log\\": "Psr/Log/"
-                }
-            },
-            "notification-url": "https://packagist.org/downloads/",
-            "license": [
-                "MIT"
-            ],
-            "authors": [
-                {
-                    "name": "PHP-FIG",
-                    "homepage": "http://www.php-fig.org/"
-                }
-            ],
-            "description": "Common interface for logging libraries",
-            "homepage": "https://github.com/php-fig/log",
-            "keywords": [
-                "log",
-                "psr",
-                "psr-3"
-            ],
-            "time": "2016-10-10T12:19:37+00:00"
-        },
-        {
-            "name": "seld/cli-prompt",
-            "version": "1.0.3",
-            "source": {
-                "type": "git",
-                "url": "https://github.com/Seldaek/cli-prompt.git",
-                "reference": "a19a7376a4689d4d94cab66ab4f3c816019ba8dd"
-            },
-            "dist": {
-                "type": "zip",
-                "url": "https://api.github.com/repos/Seldaek/cli-prompt/zipball/a19a7376a4689d4d94cab66ab4f3c816019ba8dd",
-                "reference": "a19a7376a4689d4d94cab66ab4f3c816019ba8dd",
-                "shasum": ""
-            },
-            "require": {
-                "php": ">=5.3"
-            },
-            "type": "library",
-            "extra": {
-                "branch-alias": {
-                    "dev-master": "1.x-dev"
-                }
-            },
-            "autoload": {
-                "psr-4": {
-                    "Seld\\CliPrompt\\": "src/"
-                }
-            },
-            "notification-url": "https://packagist.org/downloads/",
-            "license": [
-                "MIT"
-            ],
-            "authors": [
-                {
-                    "name": "Jordi Boggiano",
-                    "email": "[email protected]"
-                }
-            ],
-            "description": "Allows you to prompt for user input on the command line, and optionally hide the characters they type",
-            "keywords": [
-                "cli",
-                "console",
-                "hidden",
-                "input",
-                "prompt"
-            ],
-            "time": "2017-03-18T11:32:45+00:00"
-        }
-    ],
-    "packages-dev": [],
-    "aliases": [],
-    "minimum-stability": "stable",
-    "stability-flags": {
-        "amphp/cluster": 20
-    },
-    "prefer-stable": false,
-    "prefer-lowest": false,
-    "platform": [],
-    "platform-dev": []
-}

+ 1 - 0
frameworks/PHP/amp/deploy/conf/php.ini

@@ -3,3 +3,4 @@ opcache.enable_cli = On
 
 # Disable assertions, because Amp uses them for debugging code
 zend.assertions = -1
+extension=uv.so

+ 0 - 12
frameworks/PHP/amp/install-ev.sh

@@ -1,12 +0,0 @@
-#!/usr/bin/env bash
-
-set -e
-
-curl -LS https://pecl.php.net/get/ev | tar -xz
-pushd ev-*
-phpize
-./configure
-make
-make install
-popd
-echo "extension=ev.so" >> "$(php -r 'echo php_ini_loaded_file();')"

+ 50 - 36
frameworks/PHP/amp/server.php

@@ -12,34 +12,42 @@ use Amp\Http\Server\Options;
 use Amp\Http\Server\Server;
 use Amp\Promise;
 use Amp\Success;
-use Psr\Log\NullLogger;
+use Monolog\Logger;
+
+define('DB_HOST', gethostbyname('tfb-database'));
 
 Amp\Loop::run(function () {
     $sockets = yield [
-        Cluster::listen("0.0.0.0:8080"),
-        Cluster::listen("[::]:8080"),
+        Cluster::listen('0.0.0.0:8080', 
+            (new Amp\Socket\BindContext)->withBacklog(102400)
+                                        ->withReusePort()
+                                        ->withTcpNoDelay()
+        )
     ];
 
     $router = new Router;
 
     // Case 1 - JSON
-    $router->addRoute("GET", "/json", new class implements RequestHandler {
+    $router->addRoute('GET', '/json', new class implements RequestHandler {
         public function handleRequest(Request $request): Promise {
             return new Success(new Response(200, [
-                "content-type" => "application/json",
-                "server" => "amphp/http-server",
+                'Content-Type' => 'application/json',
+                'Server' => 'amphp/http-server',
             ], \json_encode([
-                "message" => "Hello, World!",
+                'message' => 'Hello, World!',
             ])));
         }
     });
 
     // Case 2 - Single Query
-    $router->addRoute("GET", "/db", new class implements RequestHandler {
+    $router->addRoute('GET', '/db', new class implements RequestHandler {
         private $mysql;
 
         public function __construct() {
-            $this->mysql = Amp\Mysql\pool("host=tfb-database user=benchmarkdbuser password=benchmarkdbpass db=hello_world");
+            $config = Amp\Mysql\ConnectionConfig::fromString(
+                'host='.DB_HOST.' user=benchmarkdbuser password=benchmarkdbpass db=hello_world'
+            );
+            $this->mysql = Amp\Mysql\pool($config);
         }
 
         public function handleRequest(Request $request): Promise {
@@ -47,7 +55,7 @@ Amp\Loop::run(function () {
         }
 
         private function doHandleRequest($request) {
-            $statement = yield $this->mysql->prepare("SELECT * FROM World WHERE id = ?");
+            $statement = yield $this->mysql->prepare('SELECT * FROM World WHERE id = ?');
             $result = yield $statement->execute([mt_rand(1, 10000)]);
 
             if (yield $result->advance()) {
@@ -57,18 +65,21 @@ Amp\Loop::run(function () {
             }
 
             return new Response(200, [
-                "content-type" => "application/json",
-                "server" => "amphp/http-server",
+                'Content-Type' => 'application/json',
+                'Server' => 'amphp/http-server',
             ], \json_encode($item));
         }
     });
 
     // Case 3 - Multiple Queries
-    $router->addRoute("GET", "/queries", new class implements RequestHandler {
+    $router->addRoute('GET', '/queries', new class implements RequestHandler {
         private $mysql;
 
         public function __construct() {
-            $this->mysql = Amp\Mysql\pool("host=tfb-database user=benchmarkdbuser password=benchmarkdbpass db=hello_world");
+            $config = Amp\Mysql\ConnectionConfig::fromString(
+                'host='.DB_HOST.' user=benchmarkdbuser password=benchmarkdbpass db=hello_world'
+            );
+            $this->mysql = Amp\Mysql\pool($config);
         }
 
         public function handleRequest(Request $request): Promise {
@@ -79,7 +90,7 @@ Amp\Loop::run(function () {
             $query = $request->getUri()->getQuery();
             \parse_str($query, $queryParams);
 
-            $queries = (int) ($queryParams["queries"] ?? 1);
+            $queries = (int) ($queryParams['queries'] ?? 1);
             if ($queries < 1) {
                 $queries = 1;
             } elseif ($queries > 500) {
@@ -88,15 +99,15 @@ Amp\Loop::run(function () {
 
             $items = [];
 
-            $statement = yield $this->mysql->prepare("SELECT * FROM World WHERE id = ?");
+            $statement = yield $this->mysql->prepare('SELECT * FROM World WHERE id = ?');
 
-            for ($i = 0; $i < $queries; $i++) {
+            while ($queries--) {
                 $items[] = new Coroutine($this->execute($statement));
             }
 
             return new Response(200, [
-                "content-type" => "application/json",
-                "server" => "amphp/http-server",
+                'Content-Type' => 'application/json',
+                'Server' => 'amphp/http-server',
             ], \json_encode(yield $items));
         }
 
@@ -109,11 +120,14 @@ Amp\Loop::run(function () {
     });
 
     // Case 4 - Fortunes
-    $router->addRoute("GET", "/fortunes", new class implements RequestHandler {
+    $router->addRoute('GET', '/fortunes', new class implements RequestHandler {
         private $mysql;
 
         public function __construct() {
-            $this->mysql = Amp\Mysql\pool("host=tfb-database user=benchmarkdbuser password=benchmarkdbpass db=hello_world");
+            $config = Amp\Mysql\ConnectionConfig::fromString(
+                'host='.DB_HOST.' user=benchmarkdbuser password=benchmarkdbpass db=hello_world'
+            );
+            $this->mysql = Amp\Mysql\pool($config);
         }
 
         public function handleRequest(Request $request): Promise {
@@ -121,15 +135,15 @@ Amp\Loop::run(function () {
         }
 
         private function doHandleRequest($request) {
-            $result = yield $this->mysql->query("SELECT * FROM Fortune");
+            $result = yield $this->mysql->query('SELECT * FROM Fortune');
             $items = [];
 
             while (yield $result->advance()) {
                 $item = $result->getCurrent();
-                $items[$item["id"]] = $item["message"];
+                $items[$item['id']] = $item['message'];
             }
 
-            $items[0] = "Additional fortune added at request time.";
+            $items[0] = 'Additional fortune added at request time.';
 
             \asort($items);
 
@@ -138,8 +152,8 @@ Amp\Loop::run(function () {
             require __DIR__ . '/fortunes.php';
 
             return new Response(200, [
-                "content-type" => "text/html; charset=utf-8",
-                "server" => "amphp/http-server",
+                'Content-Type' => 'text/html; charset=utf-8',
+                'Server' => 'amphp/http-server',
             ], \ob_get_clean());
         }
 
@@ -152,30 +166,30 @@ Amp\Loop::run(function () {
     });
 
     // Case 6 - Plaintext
-    $router->addRoute("GET", "/plaintext", new class implements RequestHandler {
+    $router->addRoute('GET', '/plaintext', new class implements RequestHandler {
         public function handleRequest(Request $request): Promise {
             return new Success(new Response(200, [
-                "content-type" => "text/plain",
-                "server" => "amphp/http-server",
-            ], "Hello, World!"));
+                'Content-Type' => 'text/plain',
+                'Server' => 'amphp/http-server',
+            ], 'Hello, World!'));
         }
     });
 
-    $logger = new Monolog\Logger("server");
-    $logger->pushHandler(Amp\Cluster\createLogHandler());
+    $logger = new Logger('Worker-' . Cluster::getId());
+    $logger->pushHandler(Cluster::createLogHandler());
 
-    $logger->info("Using " . get_class(Amp\Loop::get()));
+    $logger->info('Using ' . get_class(Amp\Loop::get()));
 
     $options = (new Options)
         ->withoutCompression()
-        ->withConnectionLimit(16384)
-        ->withConnectionsPerIpLimit(16384);
+        ->withConnectionLimit(102400)
+        ->withConnectionsPerIpLimit(102400);
 
     $server = new Server($sockets, $router, $logger, $options);
 
     yield $server->start();
 
-    Amp\Loop::onSignal(SIGINT, function (string $watcherId) use ($server) {
+    Amp\Loop::onSignal(\SIGINT, function (string $watcherId) use ($server) {
         Amp\Loop::cancel($watcherId);
 
         yield $server->stop();