在牛仔websocket例子中 在toppage_handler.erl
handle(Req, State) ->
{Echo, Req2} = cowboy_req:qs_val(<<"echo">>, Req),
{ok, Req, State}.
我想让param Echo进入以下函数
例如:
本地主机:8080 /回声= 123
在ws_handler.erl
中 websocket_init(_TransportName, Req, _Opts) ->
%%How can I use the Echo(123) here?
erlang:start_timer(1000, self(), <<"Hello!">>),
{ok, Req, undefined_state}.
答案 0 :(得分:0)
一个简单的解决方法是使用路径绑定:
在您的路线中:
Dispatch = cowboy_router:compile([
%% {HostMatch, list({PathMatch, Handler, Opts})}
{'_', [{"/echo/:echo", my_handler, []}]}
]),
然后在你的代码中:
{Echo, Req2} = cowboy_req(echo,Req)
最好在Websocket_handle中执行此操作,因为您可以将响应发送到套接字。在init中,你必须在你的状态下携带它,如下所示:
websocket_init(_TransportName, Req, _Opts) ->
{Echo, Req2} = cowboy_req:binding(echo,Req),
erlang:start_timer(1000, self(), <<"Hello!">>),
{ok, Req2, {Echo}}.
websocket_handle(_Frame, Req, {Echo}) ->
{reply, {text, Echo}, Req, State}.
由于websocket旨在处理长期连接,我使用这样的绑定来支持信道,用户ID等信息。但不是像“echo”中的数据,因为你想要发送多个不同的文本来回声而不关闭并且每次只是为了更改URL而重新打开websocket连接。