Lagomã試ãã¦ã¿ãã·ãªã¼ãºç¬¬6åã§ããä»åã¯Akka Streamsã使ã£ãã¹ããªã¼ãã³ã°ã試ãã¦ã¿ã¾ããã
ã¾ãã¯ç°¡åãªä¾ã¨ãã¦ã¬ã¹ãã³ã¹ãã¹ããªã¼ã ã§è¿ããµã¼ãã¹ãå®ç¾©ãã¦ã¿ã¾ããResponseã®åã«Akka Streamsã®Source
ãæå®ãã¦ãã以å¤ã¯é常ã®ãµã¼ãã¹ã¨å¤ããã¾ããã
ServiceCall<Integer, String, Source<String, ?>> tick(); @Override default Descriptor descriptor() { return named("helloservice").with( pathCall("/tick/:interval", tick()) ).withAutoAcl(true); }
å®è£
ã¯ä»¥ä¸ã®ãããªæãã«ãªãã¾ãããã®ãµã¼ãã¹ã¯ãªã¯ã¨ã¹ããããã¡ãã»ã¼ã¸ãinterval
ã§æå®ãããééã§ç¹°ãè¿ãè¿å´ããã¨ãããã®ã§ãã
@Override public ServiceCall<Integer, String, Source<String, ?>> tick() { return (intervalMs, tickMessage) -> { FiniteDuration interval = FiniteDuration.create(intervalMs, TimeUnit.MILLISECONDS); return completedFuture(Source.tick(interval, interval, tickMessage)); }; }
ã¹ããªã¼ã ã使ç¨ãããµã¼ãã¹ã¯ã¯ã©ã¤ã¢ã³ãããã¯WebSocketã§å¼ã³åºããã¨ãã§ãããããªã®ã§wscatã使ã£ã¦ãã¹ããã¦ã¿ã¾ããwscatã¯Node.jsã§å®è£ ãããWebSocketã¯ã©ã¤ã¢ã³ãã§ãã³ãã³ãã©ã¤ã³ã§WebSocketã®åä½ç¢ºèªãè¡ããã¨ãã§ãã¾ãã
å®è¡çµæã¯ä»¥ä¸ã®ããã«ãªãã¾ãã
$ wscat -c ws://localhost:9000/tick/1000 connected (press CTRL+C to quit) > hello < hello < hello < hello < hello
以ä¸ã®ããã«RequestãSource
ã«ãããã¨ãã§ãã¾ãã
public ServiceCall<NotUsed, Source<String, ?>, Source<String, ?>> sayHello() { return (id, names) -> completedFuture(names.map(name -> "Hello " + name)); }
åä½ã¯ä»¥ä¸ã®ããã«ãªãã¾ãã
$ wscat -c ws://localhost:9000/sayHello connected (press CTRL+C to quit) > say < Hello say > hello < Hello hello
WebSocketã使ç¨ãããµã¼ãã¹ãæè»½ã«å®è£ ã§ããã®ã¯ããã§ããã