reactive web applications
TRANSCRIPT
Unless otherwise indicated, these slides are © 2013-2014 Pivotal Software, Inc. and licensed under a Creative Commons Attribution-NonCommercial license: http://creativecommons.org/licenses/by-nc/3.0/
Stephane MaldiniRossen Stoyanchev
About the Speakers
•••
ReadListener WriteListener
ServletInputStream ServletOutputStream
• isReady read() write()•
request.getParameters()
java.util.concurrent
onSubscribe
onNext*(onError|onComplete)?
PublisherSubscriber
Subscription
request(n)cancel()
public interface ServerHttpRequest extends HttpRequest {
Publisher<byte[]> getBody();
}
public interface ServerHttpResponse extends HttpMessage {
Publisher<Void> writeWith(Publisher<byte[]> publisher);
}
public interface ServerHttpRequest extends HttpRequest {
InputStream getBody();
}
public interface ServerHttpResponse extends HttpMessage {
OutputStream getBody();
}
?
?
Publisher<T> <T>
Publisher
Publisher
Streams.just('a' 'b' 'c') .take(2) .map(Character::toUpperCase) .consume(System.out::println);
Observable.just('a', 'b', 'c').take(2).map(Character::toUpperCase).subscribe(System.out::println);
Observable-Observer Publisher-Subscriber
Demo:
HeadFirst
rx.Observable
rx.Subscriber
Publisher
Subscriber
Max(request) == Queue.capacity()
Publisher
Subscriber
Subscription.request(n)
@RequestMapping("/capitalize")@ResponseBodypublic Publisher<Person> capitalize(@RequestBody Publisher<Person> persons) { return persons.map(person -> { person.setName(person.getName().toUpperCase()); return person; });}
Publisher
@RequestMapping("/capitalize")@ResponseBodypublic Stream<Person> capitalize(@RequestBody Stream<Person> persons) { return persons.map(person -> { person.setName(person.getName().toUpperCase()); return person; });}
Stream
@RequestMapping("/capitalize")@ResponseBodypublic Observable<Person> capitalize(@RequestBody Observable<Person> persons) { return persons.map(person -> { person.setName(person.getName().toUpperCase()); return person; });}
Observable
function() {
StreamService.connect("stream")
.flatMap(unpackCsv)
.subscribe(updateUI, logError, logComplete);
}
var unpackCsv = function (ev) {
return Rx.Observable.from(ev.data ? ev.data.split("\n") : [])
.filter(discardEmpty)
.map(csvToJson)
}
Learn More. Stay Connected.
Thank You for Listening!
@smaldini / @rstoya05