更改脚本文件时必须重新构建Erlang项目

Erlang project must be rebuilt when changing script file

本文关键字:构建 项目 Erlang 新构建 脚本 文件      更新时间:2023-09-26

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

如果牛仔接受{text,Msg},Req,State,但客户端只发送文本,这是如何工作的?此外,客户端从未收到{回复,{文本,YouSaid…},但只收到纯文本信息?

关于重建,这个项目正在生成一个Erlang版本,它是一个目录结构,包含运行应用程序所需的完整系统。每次运行rebar generate时,它都会重新创建发布,生成静态文件的副本并使用该副本。如果您在原地构建项目(在开发中更常见),那么Cowboy将直接从源代码树中提供文件,您将能够在不重新构建服务器的情况下获取新的更改。

对于{text,Msg}{reply, ...}元组,它们是由底层的cowboy websockets库代码创建的。它从套接字接收客户端数据,根据收到的数据创建{text, Msg}元组和Req变量,然后用这些值和State变量调用websocket_handle/3。当该处理函数返回{reply, ...}元组时,底层websockets代码从中提取消息并通过套接字将其发送回客户端。您可以在cowboy_websocket_handler文档中找到有关websocket_handle/3函数的更多信息。