Skip to content

Commit 3c3536d

Browse files
committed
Document streaming
1 parent 45bb2b1 commit 3c3536d

File tree

1 file changed

+40
-7
lines changed

1 file changed

+40
-7
lines changed

README.md

Lines changed: 40 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -19,7 +19,7 @@ use com\amazon\aws\lambda\Handler;
1919

2020
class Greet extends Handler {
2121

22-
/** @return com.amazon.aws.lambda.Lambda|callable */
22+
/** @return callable|com.amazon.aws.lambda.Lambda|com.amazon.aws.lambda.Streaming */
2323
public function target() {
2424
return fn($event, $context) => sprintf(
2525
'Hello %s from PHP %s via %s @ %s',
@@ -43,7 +43,7 @@ use com\amazon\aws\lambda\Handler;
4343

4444
class Greet extends Handler {
4545

46-
/** @return com.amazon.aws.lambda.Lambda|callable */
46+
/** @return callable|com.amazon.aws.lambda.Lambda|com.amazon.aws.lambda.Streaming */
4747
public function target() {
4848
$default= $this->environment->properties('task')->readString('greet', 'default');
4949

@@ -60,7 +60,6 @@ class Greet extends Handler {
6060

6161
The lambda's environment accessible via *$this->environment* is an Environment instance, see [below](https://github.com/xp-forge/lambda#environment).
6262

63-
6463
### Logging
6564

6665
To write output to the lambda's log stream, use *trace()*:
@@ -70,7 +69,7 @@ use com\amazon\aws\lambda\Handler;
7069

7170
class Greet extends Handler {
7271

73-
/** @return com.amazon.aws.lambda.Lambda|callable */
72+
/** @return callable|com.amazon.aws.lambda.Lambda|com.amazon.aws.lambda.Streaming */
7473
public function target() {
7574
return function($event, $context) {
7675
$this->environment->trace('Invoked with ', $event);
@@ -83,6 +82,40 @@ class Greet extends Handler {
8382

8483
Any non-string arguments passed will be converted to string using `util.Objects::stringOf()`. To integrate with [XP logging](https://github.com/xp-framework/logging), pass the environment's writer to the console appender, e.g. by using `$cat= Logging::all()->toConsole($this->environment->writer)`.
8584

85+
### Response streaming
86+
87+
This library supports AWS Lambda response streaming as [announced by AWS in April 2023](https://aws.amazon.com/de/blogs/compute/introducing-aws-lambda-response-streaming/). To use the stream, return a `function(var, Stream, Context)` from the handler's *target()* method instead of a `function(var, Context)`:
88+
89+
```php
90+
use com\amazon\aws\lambda\Handler;
91+
92+
class Streamed extends Handler {
93+
94+
public function target(): callable {
95+
return function($event, $stream, $context) {
96+
$stream->use('text/plain');
97+
$stream->write("[".date('r')."] Hello world...\n");
98+
99+
sleep(1);
100+
101+
$stream->write("[".date('r')."] ...from Lambda\n");
102+
$stream->end();
103+
};
104+
}
105+
}
106+
```
107+
108+
The stream API is defined as follows:
109+
110+
```php
111+
public interface com.amazon.aws.lambda.Stream {
112+
public abstract function transmit(io.Channel|io.streams.InputStream $source, string $mimeType): void
113+
public abstract function use(string $mimeType): void
114+
public abstract function write(string $bytes): void
115+
public abstract function end(): void
116+
}
117+
```
118+
86119
Development
87120
-----------
88121
To run your lambda locally, use the following:
@@ -206,9 +239,9 @@ In order to programmatically use other AWS services use the *ServiceEndpoint* cl
206239
use com\amazon\aws\{Credentials, ServiceEndpoint};
207240
use com\amazon\aws\lambda\Handler;
208241

209-
class Streaming extends Handler {
242+
class WebSockets extends Handler {
210243

211-
/** @return com.amazon.aws.lambda.Lambda|callable */
244+
/** @return callable|com.amazon.aws.lambda.Lambda|com.amazon.aws.lambda.Streaming */
212245
public function target() {
213246
return function($event, $context) {
214247

@@ -228,7 +261,7 @@ class Streaming extends Handler {
228261
To test this locally, pass the necessary environment variables via *-e* on the command line:
229262

230263
```bash
231-
$ xp lambda test -e AWS_ACCESS_KEY_ID=... -e AWS_SECRET_ACCESS_KEY=... Streaming '{"requestContext":...}'
264+
$ xp lambda test -e AWS_ACCESS_KEY_ID=... -e AWS_SECRET_ACCESS_KEY=... WebSockets '{"requestContext":...}'
232265
# ...
233266
```
234267

0 commit comments

Comments
 (0)