2015-09-24 29 views
1

我正在學習erlang,我試過這個項目 - https://github.com/hcs42/cowboy_tutorial_webchat更改腳本文件時必須重建Erlang項目

我建立它使用

./rebar compile generate skip-deps=true && rel/chat/bin/chat console 

燈的情況下,如果我會改變.js文件,我只會重新加載頁面和新的變化將被應用。

在這個erlang項目的情況下,每當我改變.js文件中的某些東西時,我必須重新編譯並使用rebat生成。爲什麼?

另外,如果我看JS實現,使用

socket.send(message); 

發送消息並接收服務器端爲:

websocket_handle({text, Msg}, Req, State) -> 
{reply, {text, << "You said: ", Msg/binary >>}, Req, State}; 

這是如何工作的,如果牛仔接受{文本,Msg,Req,State但客戶端只發送文本?另外客戶端永遠不會獲得{回覆,{text,YouSaid ...},但只能得到純文本消息?

回答

2

關於重建,該項目正在生成一個目錄結構Erlang release,該目錄結構包含運行應用程序所需的完整系統。每次運行rebar generate時,都會重新創建發行版,製作靜態文件的副本並使用該副本。如果您正在建立項目(更常見的是開發),那麼Cowboy將直接從您的源代碼樹中提供文件,並且您將能夠在不重建服務器的情況下獲取新更改。

至於{text,Msg}{reply, ...}元組,這些元組是由底層牛仔websockets庫代碼創建的。它從套接字接收客戶端數據,根據接收到的數據創建{text, Msg}元組和Req變量,然後使用這些值和State變量調用websocket_handle/3。當該處理函數返回{reply, ...}元組時,底層websockets代碼將從中提取消息並通過套接字將其發送回客戶端。您可以在cowboy_websocket_handler documentation中找到有關websocket_handle/3函數的更多信息。

+0

很好的答案。謝謝 :) – n32303

相關問題