我正在学习 erlang,我尝试了这个项目 - https://github.com/hcs42/cowboy_tutorial_webchat .
我用
构建它./rebar compile generate skip-deps=true && rel/chat/bin/chat console
在 LAMP 的情况下,如果我要更改 .js 文件,我只会重新加载页面并应用新的更改。
对于这个 erlang 项目,每次我更改 .js 文件中的某些内容时,我都必须使用 rebat 重新编译和生成。为什么会这样?
此外,如果我查看 JS 实现,消息是使用
socket.send(message);
并在服务器端接收为:
websocket_handle({text, Msg}, Req, State) ->
{reply, {text, << "You said: ", Msg/binary >>}, Req, State};
如果 cowboy 接受 {text,Msg},Req,State 但客户端只发送文本,这是如何工作的?客户端也永远不会收到 {reply,{text,YouSaid...},而只会收到纯文本消息?
最佳答案
关于重建,这个项目正在生成一个 Erlang release ,这是一个目录结构,包含运行应用程序所需的完整系统。每次运行 rebar generate
时,它都会重新创建版本,制作静态文件的副本并使用该副本。如果您就地构建项目(在开发中更常见),那么 Cowboy 将直接从您的源代码树提供文件,您将能够在不重建服务器的情况下获取新的更改。
至于 {text,Msg}
和 {reply, ...}
元组,它们是由底层的 cowboy websockets 库代码创建的。它从套接字接收客户端数据,根据接收到的内容创建 {text, Msg}
元组和 Req
变量,然后调用 websocket_handle/3
使用这些值和 State
变量。当该处理函数返回一个 {reply, ...}
元组时,底层 websockets 代码从中提取消息并通过套接字将其发送回客户端。您可以在 cowboy_websocket_handler documentation 中找到有关 websocket_handle/3
函数的更多信息。 .
关于javascript - 更改脚本文件时必须重建 Erlang 项目,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/32756851/