javascript - 更改脚本文件时必须重建 Erlang 项目

标签 javascript erlang cowboy

我正在学习 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/

相关文章:

javascript - x 是 Javascript FF/Safari 中的保留关键字而不是 IE 中的保留关键字吗?

javascript - 代码是什么 { [s : string]: boolean } in the Angular Code block?

javascript - JSON.Stringify 在 Scripting.Dictionary 对象上失败

concurrency - 如何使用 Erlang 样式并发 "share state"?

rest - Cowboy 多方法处理器

javascript - 如何在 Angular2 应用程序中使用 ngrx-effects 从商店返回分页数据或从 api 服务返回新数据?

string - erlang中的驼峰式程序

mysql - 如何在 Erlang 中安装驱动程序? (特别是 MySQL-otp 驱动程序)

erlang - Erlang 日志中未知的 ca

http - Web 服务器容忍高客户端轮询率 : Cowboy vs. Yaws Web 服务器