更改脚本文件时必须重建 Erlang 项目
Erlang project must be rebuilt when changing script file
我正在学习 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
变量,然后使用这些值和 State
变量调用 websocket_handle/3
。当该处理程序函数 returns 一个 {reply, ...}
元组时,底层 websockets 代码从中提取消息并通过套接字将其发送回客户端。您可以在 cowboy_websocket_handler documentation.
中找到有关 websocket_handle/3
函数的更多信息
我正在学习 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
变量,然后使用这些值和 State
变量调用 websocket_handle/3
。当该处理程序函数 returns 一个 {reply, ...}
元组时,底层 websockets 代码从中提取消息并通过套接字将其发送回客户端。您可以在 cowboy_websocket_handler documentation.
websocket_handle/3
函数的更多信息