2016-08-07 30 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