2017-11-12 16:13:12 +01:00
< a href = "https://amphp.org/" >
2017-11-12 16:14:58 +01:00
< img src = "https://github.com/amphp/logo/blob/master/repos/amp-logo-with-margin.png?raw=true" width = "250" align = "right" alt = "Amp Logo" >
2017-11-12 16:13:12 +01:00
< / a >
2015-04-29 17:29:09 +02:00
2017-11-12 16:14:58 +01:00
< a href = "https://amphp.org/" > < img alt = "Amp" src = "https://github.com/amphp/logo/blob/master/repos/amp-text.png?raw=true" width = "100" valign = "middle" > < / a > < a href = "https://travis-ci.org/amphp/amp" > < img src = "https://img.shields.io/travis/amphp/amp/master.svg?style=flat-square" valign = "middle" > < / a > < a href = "https://coveralls.io/github/amphp/amp?branch=master" > < img src = "https://img.shields.io/coveralls/amphp/amp/master.svg?style=flat-square" valign = "middle" > < / a > < a href = "blob/master/LICENSE" > < img src = "https://img.shields.io/badge/license-MIT-blue.svg?style=flat-square" valign = "middle" > < / a >
2015-07-19 19:29:25 +02:00
2017-07-16 18:24:07 +02:00
Amp is a non-blocking concurrency framework for PHP. It provides an event loop, promises and streams as a base for asynchronous programming.
2017-03-13 13:16:59 +01:00
2017-03-13 15:49:25 +01:00
Promises in combination with generators are used to build coroutines, which allow writing asynchronous code just like synchronous code, without any callbacks.
2013-11-24 17:30:03 +01:00
2017-03-13 13:16:59 +01:00
## Installation
This package can be installed as a [Composer ](https://getcomposer.org/ ) dependency.
```bash
2017-07-16 18:24:07 +02:00
composer require amphp/amp
2017-03-13 13:16:59 +01:00
```
2017-11-12 17:15:42 +01:00
## Documentation
Documentation can be found on [amphp.org ](https://amphp.org/ ) as well as in the [`./docs` ](./docs ) directory.
2017-03-13 13:16:59 +01:00
## Requirements
2013-08-05 22:05:08 +02:00
2017-03-12 12:44:32 +01:00
- PHP 7.0+
2015-07-22 06:06:02 +02:00
2017-03-13 13:16:59 +01:00
##### Optional Extension Backends
2015-07-22 06:06:02 +02:00
2017-03-13 13:16:59 +01:00
Extensions are only needed if your app necessitates a high numbers of concurrent socket connections.
2015-11-01 03:54:13 +01:00
2015-07-22 06:06:02 +02:00
- [ev ](https://pecl.php.net/package/ev )
2017-07-17 23:42:51 +02:00
- [event ](https://pecl.php.net/package/event )
2017-03-13 13:16:59 +01:00
- [php-uv ](https://github.com/bwoebi/php-uv ) (experimental fork)
2015-05-12 21:18:28 +02:00
2017-11-12 17:15:42 +01:00
## Examples
This simple example uses our [Artax ](https://amphp.org/artax/ ) HTTP client to fetch multiple HTTP resources concurrently.
```
< ?php
use Amp\Artax\Response;
use Amp\Loop;
require __DIR__ . '/../vendor/autoload.php';
Loop::run(function () {
$uris = [
"https://google.com/",
"https://github.com/",
"https://stackoverflow.com/",
];
$client = new Amp\Artax\DefaultClient;
$client->setOption(Amp\Artax\Client::OP_DISCARD_BODY, true);
try {
foreach ($uris as $uri) {
$promises[$uri] = $client->request($uri);
}
$responses = yield $promises;
foreach ($responses as $uri => $response) {
print $uri . " - " . $response->getStatus() . $response->getReason() . PHP_EOL;
}
} catch (Amp\Artax\HttpException $error) {
// If something goes wrong Amp will throw the exception where the promise was yielded.
// The Client::request() method itself will never throw directly, but returns a promise.
print $error->getMessage() . PHP_EOL;
}
});
```
2014-08-07 07:35:17 +02:00
2017-11-12 17:15:42 +01:00
Further examples can be found in the [`./examples` ](./examples ) directory of this repository as well as in the `./examples` directory of [our other libraries ](https://github.com/amphp?utf8=%E2%9C%93&q=&type=public&language=php )
2017-03-13 13:16:59 +01:00
## Versioning
`amphp/amp` follows the [semver ](http://semver.org/ ) semantic versioning specification like all other `amphp` packages.
2017-06-30 12:04:05 +02:00
| Version | Bug Fixes Until | Security Fixes Until |
| ------- | --------------- | -------------------- |
| 2.x | TBA | TBA |
| 1.x | 2017-12-31 | 2018-12-31 |
2017-03-13 13:16:59 +01:00
## Compatible Packages
Compatible packages should use the [`amphp` ](https://github.com/search?utf8=%E2%9C%93&q=topic%3Aamphp ) topic on GitHub.
## Security
If you discover any security related issues, please email [`bobwei9@hotmail.com` ](mailto:bobwei9@hotmail.com ) or [`me@kelunik.com` ](mailto:me@kelunik.com ) instead of using the issue tracker.
## License
2017-03-13 15:49:25 +01:00
The MIT License (MIT). Please see [`LICENSE` ](./LICENSE ) for more information.