Elixir Phoenix对websocket API感到满意

时间:2017-09-09 07:56:22

标签: elixir phoenix-framework phoenix-channels

RESTful到websocket API问题:我想启用与websockets接口的RESTful api。

我有一些硬件维护与我的Phx.server的WS连接,我想允许其他客户端通过RESTful api访问phx.server并与WS连接的硬件进行交互。

我还没想到的部分是RESTful调用的响应,即http响应。假设我希望客户端能够通过WS连接的硬件上的传感器请求当前温度。

我可以使用Phoenix.Endpoint.broadcast(主题,事件,消息)通过控制器向WS广播,但是我想“等待”响应,以便我可以在HTTP响应中发回temp客户。任何建议表示赞赏。

1 个答案:

答案 0 :(得分:0)

我不确定,但我会尝试类似的事情:

conn结构发送到您的套接字设备,该套接字设备将其包含在response内。

在你的Channel中实现一个handle_in回调,它将处理来自你的Socket的响应,使用conn结构,以便你可以重用它,将响应发送到你的HTTP客户端:

  # Send the connection to your socket
  Phoenix.Endpoint.broadcast(topic, event, %{"conn" => conn})

  #
  def handle_in("temperature_response", %{"temperature" => t, "conn" => conn}, socket) do
    render(conn, "temperature.json", %{"temperature" => t})
    {:noreply, socket}
  end