2013-08-07 53 views
0

在牛仔的WebSocket例如 我怎麼能發送到PARAM連接websock在toppage_handler.erl使用牛仔

handle(Req, State) -> 
     {Echo, Req2} = cowboy_req:qs_val(<<"echo">>, Req), 
     {ok, Req, State}. 

我想帕拉姆回聲分爲以下幾個功能

例如:

本地主機: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}. 
+1

您是否嘗試過從websocket_init函數調用'cowboy_req:qs_val(<<"echo">>,Req)'?我會假設它的工作。 – johlo

+0

Johlo的權利。看不出爲什麼它不起作用。 – Berzemus

+0

它在websocket_init/3中不起作用,並且這兩個func中的processid不同 – ter

回答

0

一個簡單的解決方法是使用路徑綁定:

在你的路線:

Dispatch = cowboy_router:compile([ 
    %% {HostMatch, list({PathMatch, Handler, Opts})} 
    {'_', [{"/echo/:echo", my_handler, []}]} 
]), 

然後在你的代碼:

{Echo, Req2} = cowboy_req(echo,Req) 

這是最好做這Websocket_handle因爲你將能夠將您的迴應發送到套接字。在初始化,你將不得不攜帶在狀態,就像這樣:

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等,但信息而不是像「回聲」中那樣的數據,因爲您希望發送多個不同的文本以進行回顯而無需關閉,並且每次只需更改URL即可重新打開WebSocket連接。

+0

沒有參數回顯,要麼 – ter

+0

我想要做的就是在erlang中發送一個param到websocket中,但怎麼做? – ter

+0

好吧,所以我編輯我的答案與我實際使用的技術,所以它的工作原理。如果沒有,你將不得不展示更多的你的代碼。歡呼聲 – niahoo