RESTful到websocket API问题:我想启用与websockets接口的RESTful api。
我有一些硬件维护与我的Phx.server的WS连接,我想允许其他客户端通过RESTful api访问phx.server并与WS连接的硬件进行交互。
我还没想到的部分是RESTful调用的响应,即http响应。假设我希望客户端能够通过WS连接的硬件上的传感器请求当前温度。
我可以使用Phoenix.Endpoint.broadcast(主题,事件,消息)通过控制器向WS广播,但是我想“等待”响应,以便我可以在HTTP响应中发回temp客户。任何建议表示赞赏。
答案 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