2016-02-06 61 views
1

使用Akka-Http和Akka-Streams版本2.4我如何構造一個流,使其具有一個接收器,它是一個websocket。Akka-Http WebSocket:Akka流使用WebSocket作爲接收器

例如,我想要一個生成隨機數的源代碼,這些數字會被過濾,讓我們說保存偶數,然後作爲接收器流入WebSocket。

感謝

回答

3

此代碼放入阿卡HTTP路線將輸出隨機數的連續流沒有壓倒WebSocket的爲例如

path("randomNums") { 
    val src = 
    Source.fromIterator(() => Iterator.continually(ThreadLocalRandom.current.nextInt())) 
      .filter(i => i > 0 && i % 2 == 0).map(i => TextMessage(i.toString)) 

    extractUpgradeToWebsocket { upgrade => 
     complete(upgrade.handleMessagesWithSinkSource(Sink.ignore, src)) 
    } 
} 
+1

十分感謝。如果我想將相同的流發送給所有連接的客戶端,我必須保留一組他們的actorRef,並在他們連接時添加他們的actorRefs。那麼當準備推送給他們的數字迭代通過集合? – Ciaran0

+0

(免責聲明:部分猜測):對於每個新的Websocket連接分別調用'upgrade =>'之後的部分。因此,您需要動態創建源代碼。查找'BroadcastHub'將一個根流分成0..n個單獨的流。 http://doc.akka.io/docs/akka/2.4/scala/stream/stream-dynamic.html#Dynamic_fan-in_and_fan-out_with_MergeHub_and_BroadcastHub – akauppi