问题标签 [cowboy]

For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.

0 投票
1 回答
511 浏览

erlang - 我应该把我的静态文本文件放在哪里才能成为 OTPy?

我正在用cowboy构建一个服务器,并且我有一些我想要服务的静态 HTML 页面。是否有一个 OTP 友好的地方可以放置这种东西?有没有一种既定的方法来告诉钢筋在哪里寻找这种东西?

0 投票
2 回答
2323 浏览

erlang - 如何使用 Cowboy 通过 websocket 异步发送数据?

我有一个Cowboy websocket 服务器,我想注册一个gen_event处理程序,通过 websocket 发送一些东西。我还需要能够使用websocket_handle/3. 我在cowboy_http_websocket_handler.erl中没有看到任何明显的内容,并且没有导出cowboy_http_websocket:websocket_send/3。我是否错过了通过打开的套接字发送内容的简单方法?

0 投票
1 回答
330 浏览

ssl - SSL 响应被分成两个回调

我正在开发一个客户端-服务器应用程序,并负责添加对在 websockets 上运行的支持。我在服务器端使用 Cowboy,并且一直在使用 Erlang websocket 客户端进行测试。

事情应该是这样的:

  1. 客户端打开套接字连接并开始 http 握手
  2. 服务器完成http握手
  3. 客户端向服务器发送消息,服务器发送回复
  4. 客户端处理回复
  5. 重复 3 & 4

客户端模块实现

当数据出现时,它由底层传输(gen_tcp 或 ssl)调用。

当我将客户端和服务器配置为使用gen_tcp. 当我改为使用ssl时,websocket 握手完成,但在第 4 步中,我得到一个回调handle_info,它只包含从服务器返回的数据的第一个字节。随后的回调将包含响应的其余部分。

我真的对这种行为感到困惑,因为交换了 gen_tcp 的相同代码可以正常工作,而且我们还有另外两个使用ssl(但不是 websockets 或牛仔)构建的传输,它们同样没有表现出这种行为。

谁能建议可能导致数据以这种方式拆分的原因?如果不需要,我宁愿不必为此编写处理程序。

更新:只是为了好玩,我修改了客户端,以便它等待两个回调发生,并在尝试解析之前连接来自这两个回调的数据。这解决了问题,但仍然让我感到困惑。

不过,我确实注意到了几件事:

  • 第一组两个回调总是包含一个字节
  • 该字节始终为 130 (0x82)

不知道这是否相关。

0 投票
2 回答
1309 浏览

erlang - Erlang 中的错误报告

我采用了牛仔示例代码并将其破坏。

默认请求处理程序的代码如下所示:

它直截了当,但我想制作返回文件,所以我将其更改为:

try-catch 应该处理可能没有文件的事实,但事实并非如此。这是为什么?

当我尝试获取一个不存在的文件时,我在控制台中收到一个很大的错误报告,谁能告诉我为什么?

0 投票
2 回答
4032 浏览

erlang - 如何从 Cowboy 获取 http 参数?

我正在使用牛仔(https://github.com/extend/cowboy)作为一项宁静的网络服务,我需要从“http://localhost:8080/?a=1&b=2&c=32”获取参数

0 投票
2 回答
1638 浏览

html - 在 Erlang Cowboy 中提供 html 文件,但它显示为文本

我正在尝试使用 Erlang Cowboy 提供动态生成的 html 页面,但它在 Firefox 14.0.1 中以文本形式出现。

这是从浏览器页面源复制的 doctype 和初始标题标签:

如果我不使用 doctype,它会按预期显示。

Bootstrap Scaffolding (http://twitter.github.com/bootstrap/scaffolding.html) 需要 html 文档类型。

我不确定这是否是我的 html 或 Cowboy 配置的问题。

这是 _app.erl 中 Dispatch 的相关部分:

有人可以告诉我我的方式错误吗?

非常感谢,

LRP

0 投票
1 回答
951 浏览

erlang - 如何在 Cowboy-server 中手动关闭 websocket-connection?

如何在 Cowboy-server 中手动(从服务器端)关闭 websocket 连接?我会在init/3的回调模块中检查登录名/密码,并用一些返回码踢“错误”的用户。做这个的最好方式是什么?

0 投票
1 回答
464 浏览

erlang - 与处理 websocket 连接的牛仔进程链接(cowboy,erlang)

我正在开发一个同时使用牛仔和 sockjs 的 erlang 应用程序,我想知道是否可以与处理 websocket 连接的牛仔进程链接?

现在,带有 gen_server 行为的进程与每个 websocet 连接相关联。这样的进程将 Conn 实例存储在 init 中,当客户端关闭连接时,该进程将从 websocket 处理程序中终止,如果 gen_server 进程终止,则从 gen_server 的 terminate() 调用 Conn:close 来进行清理。它有效,但我不喜欢这个解决方案,因为在某些情况下,即使启用了 trap_exit,也不会调用终止函数,所以如果可以进行链接,它会是更好、更简单的解决方案。

0 投票
2 回答
644 浏览

erlang - 在许多牛仔示例中,一对一主管的目的是什么

在 Cowboy github 上提供的示例中,以及我在网上找到的其他一些示例中,有一个一对一的主管似乎什么都不做。我什至相信我看到了一个带有以下评论的示例,“就像真正的主管什么都不做一样”。

这么多牛仔示例中的主管模块的目的是什么?

从 echo_get 示例:

0 投票
1 回答
3956 浏览

http - Web 服务器对高客户端轮询率的容忍度:Cowboy 与 Yaws Web 服务器

我一直在构建一个实时通知系统。它是 Web 应用程序的一部分,但必须在事件发生时立即查看。长时间轮询不是一种选择,因为当没有可用事件时,Web 服务器保持连接会很昂贵,所以我不得不进行短期轮询。

每个客户端每隔 2 秒访问一次 Web 服务器(这是一个相当高的速率)。当事件可用时,它们将作为 JSON 发送到 JavaScript 客户端。现在,这需要一个服务器设置来处理大量的短期连接。我已经使用 Yaws Web 服务器实现了一个这样的系统。然而,因为 Yaws 启动了许多其他服务,感觉很重,当连接超过 30,000 时,连接开始被拒绝或中止(可能是因为我在 Yaws 运行的同一个 Erlang VM 中运行一些 ETS 表[分离这些可能需要rpc:call/4,我担心这会增加延迟])。我知道有一些特定于操作系统的调整要做,而且已经完成了。

如果集群多个 Yaws 实例很容易,这将不是问题。在 Yaws 中,我使用了一些 appmod,并且我正在以 REST 的方式做事。我在想 Cowboy Web 服务器可能会在这里增强一些东西。我以前没有用过 Cowboy,但我用过 Misultin。看看 Cowboy,它是一个成熟的 OTP 应用程序,它似乎很容易集群,而且是轻量级的,可能会增加整个系统可以处理的客户端数量。存储在 Mnesia 上,我可以轻松地分配它以添加更多节点(可能通过复制),因此每个 Mnesia 实例前面都有一个 Cowboy 实例。

我的问题是:

  1. 我的猜测是否正确,如果我从 Yaws 切换到 Cowboy,我可能会显着提高性能?

  2. Yaws 有一个干净的 API viaAppmods#arg{}记录。Cowboy 是否有这两种东西的等价物(请说明)?

  3. 可以Cowboy处理文件上传吗?如果是这样,您认为在频繁上传文件的情况下使用哪个服务器(Yaws 或 Cowboy)会更好?说明如何使用 Cowboy 完成文件上传。

  4. 可以在同一台机器上运行多个 Yaws 实例。你认为为每台服务器(物理机)创建多个 Yaws 实例并将客户端负载分布在这些实例上会有所帮助吗?我需要知道什么?

  5. 当我设置yaws.conf参数max_connections = nolimit时,如何在 Cowboy 中指定相同的参数?

现在,我关注了Cowboy 作者的采访,他讨论了 Cowboy 比 Yaws 更轻量级的原因。他说

最大的区别是使用二进制文件而不是列表。通用受体池是另一个。我可以列出很多其他的小差异,但我认为这些并不是最有趣的。

那是因为 Cowboy 使用了侦听器池库Ranch,它以某种方式最终具有处理更多连接的更高能力,以及使用二进制文件而不是列表。

同一采访中的另一句话:

由于我们每个连接使用一个进程而不是两个进程,并且我们使用二进制文件而不是列表,因此在没有用户干预的情况下,我们最终使用的内存比其他项目少得多。牛仔也很懒惰,除非需要,它不会做任何事情。所以在用户开始调用函数之前,我们没有太多内存。

我想知道 yaws 是如何处理这种情况的。不知何故,我的问题域需要轻量级的 HTTP 处理。与 Mochiweb、Misultin 或 Cowboy 相比,Yaws 确实会导致更多的内存消耗。我最担心的是,Yaws 拥有最好/最干净的 API,它使我们能够访问#arg{}包含我们需要的所有内容作为 Erlang 记录,这样我们就可以自己将它们取出,而不是其他具有许多用于在外部提取内容的函数的 API。甚至文档:Yaws 文档也非常好且简单明了。也许我需要查看更多的 Cowboy 代码来处理文件上传和简单GET请求POST处理等问题。

否则,我之前提出的问题仍然是紧迫的问题。Yaws 相当不错,但对于这种快速、轻量级、短命、高率的民意调查情况似乎有点过头了,你怎么看?