【问题标题】:Erlang project must be rebuilt when changing script file更改脚本文件时必须重建 Erlang 项目
【发布时间】:2015-12-21 18:59:08
【问题描述】:

我正在学习 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...},而只会收到纯文本消息?

【问题讨论】:

    标签: javascript erlang cowboy


    【解决方案1】:

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

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

    【讨论】:

    • 很好的答案。谢谢你:)
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2016-08-23
    • 2016-08-22
    • 1970-01-01
    • 2014-12-07
    • 1970-01-01
    相关资源
    最近更新 更多