diff --git a/reactive-test/pom.xml b/reactive-test/pom.xml new file mode 100644 index 00000000..6bfe835f --- /dev/null +++ b/reactive-test/pom.xml @@ -0,0 +1,24 @@ + + + 4.0.0 + + org.example + reactive-test + 1.0-SNAPSHOT + + + + org.reactivestreams + reactive-streams + 1.0.3 + + + + + 11 + 11 + + + \ No newline at end of file diff --git a/reactive-test/src/main/java/Application.java b/reactive-test/src/main/java/Application.java new file mode 100644 index 00000000..289d6903 --- /dev/null +++ b/reactive-test/src/main/java/Application.java @@ -0,0 +1,8 @@ +public class Application { + public static void main(String[] args) { + MyPublisher publisher = new MyPublisher(); + MySubscriber subscriber = new MySubscriber(); + + publisher.subscribe(subscriber); + } +} diff --git a/reactive-test/src/main/java/MyPublisher.java b/reactive-test/src/main/java/MyPublisher.java new file mode 100644 index 00000000..55839419 --- /dev/null +++ b/reactive-test/src/main/java/MyPublisher.java @@ -0,0 +1,18 @@ +import org.reactivestreams.Publisher; +import org.reactivestreams.Subscriber; + +import java.util.Arrays; + +public class MyPublisher implements Publisher { + + Iterable its = Arrays.asList(1,2,3,4,5,6,7,8,9,10); + + @Override + public void subscribe(Subscriber subscriber) { + System.out.println("구독 신청"); + System.out.println("구독 정보 생성"); + MySubscription subscription = new MySubscription(subscriber, its); + System.out.println("구독 정보 생성완료"); + subscriber.onSubscribe(subscription); + } +} diff --git a/reactive-test/src/main/java/MySubscriber.java b/reactive-test/src/main/java/MySubscriber.java new file mode 100644 index 00000000..9914335e --- /dev/null +++ b/reactive-test/src/main/java/MySubscriber.java @@ -0,0 +1,37 @@ +import org.reactivestreams.Subscriber; +import org.reactivestreams.Subscription; + +public class MySubscriber implements Subscriber { + + private Subscription s; + private final int SIZE = 5; + private int bufferSize = SIZE; + + @Override + public void onSubscribe(Subscription subscription) { + System.out.println("구독 정보 받음"); + this.s = subscription; + s.request(bufferSize); // 요청 개수 + } + + @Override + public void onNext(Integer integer) { + System.out.println("구독 데이터 전달 : " + integer); + bufferSize--; + if (bufferSize == 0) { + System.out.println("하루 지남"); + bufferSize = SIZE; + s.request(bufferSize); + } + } + + @Override + public void onError(Throwable throwable) { + System.out.println("구독 에러"); + } + + @Override + public void onComplete() { + System.out.println("구독 완료"); + } +} diff --git a/reactive-test/src/main/java/MySubscription.java b/reactive-test/src/main/java/MySubscription.java new file mode 100644 index 00000000..73dc968e --- /dev/null +++ b/reactive-test/src/main/java/MySubscription.java @@ -0,0 +1,33 @@ +import org.reactivestreams.Subscriber; +import org.reactivestreams.Subscription; + +import java.util.Iterator; + +public class MySubscription implements Subscription { + + private Subscriber s; + private Iterator it; + + public MySubscription(Subscriber s, Iterable it) { + this.s = s; + this.it = it.iterator(); + } + + @Override + public void request(long l) { + while(l > 0) { + if (it.hasNext()) { + s.onNext(it.next()); + } else { + s.onComplete(); + break; + } + l--; + } + } + + @Override + public void cancel() { + + } +} diff --git a/webflux/src/main/java/com/example/webflux/MyFilterConfig.java b/webflux/src/main/java/com/example/webflux/MyFilterConfig.java index 097c7ce4..df23d35f 100644 --- a/webflux/src/main/java/com/example/webflux/MyFilterConfig.java +++ b/webflux/src/main/java/com/example/webflux/MyFilterConfig.java @@ -16,7 +16,7 @@ public class MyFilterConfig { @Bean public FilterRegistrationBean addFilter() { FilterRegistrationBean bean = new FilterRegistrationBean<>(new MyFilter(eventNotify)); - bean.addUrlPatterns("/*"); + bean.addUrlPatterns("/sse"); return bean; } @Bean