2016-08-07 27 views
0

我有一個過程,讀取文件,該測試讀取一行每秒靈藥如何將數據發送到WebSockets的反覆

我希望所有連接的WebSockets收到相同的線

e.g;

如果用戶1連接他接收線1,第二線2後..第二線3後..線4 ..等

如果用戶2他收到線3 3秒後連接,一秒後他又收到4號線等等..

我該如何實現這個?我應該使用牛仔v1還是v2?

這是使用PubSub的

defp stream_from_file(fpath, bytes) do 
    File.stream!(fpath, [], bytes) 
    |> Enum.each(fn chunk -> 
     PubSub.publish(:topic1, {:topic1_data, chunk}) 
     :timer.sleep(1_000) 
    end) 
    stream_from_file(fpath, bytes) 
    end 

回答

0

我猜你正在使用鳳凰,從文件中讀取過程中的代碼。在這種情況下,您可以從任何地方在您的端點上調用廣播。所以,你可以替換爲您PubSub.publish行:

MyApp.Endpoint.broadcast("room1", "topic1", %{topic_data: chunk}) 

這些信息將被髮送到房間1加盟渠道與「TOPIC1」事件的所有用戶,因此在客戶端,你將與接受它:

let channel = socket.channel("room1", {}) 
channel.join() 
    .receive("topic1", body => { console.log(body.topic_data) }) 
+0

使用[{:plug,「〜> 1.0」},{:cowboy,「〜> 1.0」},{:pubsub,「〜> 0.0.2」}],低級別來更好地理解正在發生的事情 – IddoE