问题标签 [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 回答
803 浏览

websocket - 牛仔前锋到港口

我正在开发一个 web-socket 项目,我希望 web-socket 牛仔服务器监听 8080 端口,但将消息转发到另一个端口。我可以这样做吗?任何帮助表示赞赏

0 投票
2 回答
1982 浏览

session - Cowboy中如何实现用户授权和会话机制?

在我的项目中,我需要用户授权。你能提示我在 Cowboy 服务器中实现会话的方法吗?

0 投票
2 回答
1261 浏览

performance - 如何微调牛仔的运行时行为?

我正在为我的高吞吐量 Web 服务器选择一种技术。我使用 Phoenix 创建了两个简单的实现,一个在 Go 中,一个在 Elixir 中。

我已将这些版本部署在 AWS 上的一台超大型机器上,并使用 siege 对其性能进行基准测试。

我在设置 后设法提高了 Go 的性能GOMAXPROCS,但是运行 Elixir 版本似乎在充分利用机器的 CPU 或内存之前很久就达到了峰值性能。

我似乎找不到任何关于如何在生产环境中微调牛仔行为的文档或解释,因此它将正确利用它运行的机器,并产生每个人都在谈论的性能......

我很确定有一个简单的地方(文件或环境变量)可以调整一个或两个值以产生更好的结果。

谁能告诉我那个地方可能在哪里?

0 投票
1 回答
1432 浏览

elixir - Elixir Plug Cowboy 不使用端口 80

我有一个路由器插头

但是,当调用 Rest.start 我得到

如果我去掉端口:80,调用Rest.start没有问题,服务器监听4000端口。

我正在使用 Elixir v0.15.0。

0 投票
3 回答
592 浏览

erlang - 用于实时网络通信的 Erlang 和 Cowboy

Cowboy 将为每个请求生成进程(在这种情况下,它是 websocket 连接、事件源请求或通过 ajax 进行的长轮询)。

只需将消息发送到代表与该用户的连接的适当进程即可解决用户之间的发送消息(如果您有两个用户并且都支持 websockets,则有 2 个进程,每个代表 websocket 连接)。

假设我有 2 个用户(Foo,Bar)。

Foo 想向 Bar 发送消息因此 Foo 进程必须以某种方式获取与表示与用户 Bar 的连接的牛仔进程相关联的 pid(这样他就可以向他发送常规的 erlang 消息 - 消息在内部发送给用户 webbrowser)。

但是 Foo 获取 pid 后 pid 会失效,因为此时用户 Bar 会重新连接(重新连接意味着与 Bar 关联的进程已终止,因为 Bar 再次连接,所以他得到了新进程)?

由于网络问题,重新连接吧。

这意味着如果 Foo 将向 Bar 发送消息(Foo 具有进程的 pid,该进程已经终止),则消息将永远不会被传递。

第一个解决方案是,因为消息应该是持久的(例如 facebook 上的消息),所以在将其发送给用户之前,您将始终将其保存到 DB。 当用户连接时,必须进行一些同步,因为即使他有 99% 的时间在线,也可能有他没有的按摩。因此,Bar 会在重新连接后同步时从 Foo 获取消息(消息将从 DB 中提取)。

现在真正的问题是: 如果 Foo 的无效 PID 太长,他会在 Bar 重新连接并执行同步后发送一些消息怎么办?Bar 的消息将存储在数据库中,但由于它是在 Bar 同步后存储的,因此不会传递。

0 投票
1 回答
148 浏览

websocket - 运行 Cowboy start_listener() 时出现异常

我已经关注了http://maplekeycompany.blogspot.in/2012/03/very-basic-cowboy-setup.html链接,但是当我运行这个项目时,它显示我的崩溃报告告诉我牛仔 start_listener() 是未定义的。

这个错误意味着什么以及如何解决它?

0 投票
1 回答
333 浏览

websocket - 使用钢筋在erlang牛仔中生成发布时出现异常?

我正在创建 Erlang Cowboy gen 服务器聊天应用程序,为此我遵循了https://github.com/hcs42/cowboy_tutorial_webchat链接。我正在使用 Erlang/otp 17,但是当我运行“./rebar generate”时,它显示以下错误。

reltool.config 文件

如何解决这个错误?如果您知道创建 Erlang 牛仔 gen_server 聊天应用程序的链接比建议的更好。

0 投票
1 回答
687 浏览

erlang - 如何在 erlang 牛仔 websocket 上验证客户端?

我们使用 Erlang/Cowboy 开发了一个基于 WebSockets 的简单聊天服务。现在,我们正在使用 localhost:8080 连接服务器。我想做用户身份验证,这将基于 URL 参数完成,它将返回用户 ID 或无连接。怎么做?

0 投票
2 回答
4349 浏览

erlang - Cowboy Web 服务器 - 提高性能

Cowboy 是用 erlang 编写的网络服务器。它为每个请求生成新进程,而不是使用该进程处理后续请求,如果 HTTP 流水线(一个接一个地在同一个套接字上发送多个请求,而不等待响应,并假设响应将以与发送请求相同的顺序发送回)由客户使用。

这很好,但是如果您想使用该网络服务器来构建实时网络应用程序,它有一个问题,那就是当套接字由于客户端网络问题而关闭时,代表服务器上该套接字的进程将终止。这意味着您不能使用该进程来存储一些会话数据(因为在实时 Web 应用程序中,您可能希望在 http 请求结束后进行(例如,如果使用长轮询)并且有一些与连接的客户端相关联的状态即使http请求已结束,也可以将他视为“他在线”。

在 sock.js 中,它通过为每个客户端(每个会话 id)生成一个多进程来解决。

因此,如果您有 2000 个使用 websockets 的客户端,您将有大约 4k 个进程(一个来自牛仔的进程代表该套接字,另一个用于保持会话状态以防牛仔进程将被终止(例如由于网络问题)。

问题是:我在 erlang 中相对较新,所以我不知道它在性能改进问题上是否有意义,但我正在考虑稍微重写 Cowboy 网络服务器,以便表示实时连接的过程不会结束,直到我想要它(即使底层的 websocket 套接字将被终止,该进程也将处于活动状态)。

这将消除为每个客户端增加一个会话进程的需要。因此,您将只有 2000 个进程,而不是 4000 个进程。它可以成为 erlang 中巨大的性能提升器吗?

0 投票
0 回答
243 浏览

erlang - Erlang Cowboy 因心跳超时而崩溃

我正在运行一个牛仔二郎服务器。我的服务器是按照99s 网站上的入门说明生成的,我正在使用命令行运行它:

事情是,在一段时间没有活动之后,服务器崩溃了,并且无法恢复。我收到的信息是这样的:

我知道可以用来监视服务的 heart 工具,如果它没有收到任何请求,它会在一段时间后重新启动它(我猜逻辑是,如果服务没有发生任何问题),但我不能找出此配置存在于牛仔应用程序的哪个位置。

所以我会问:

  1. 谁能解释为什么服务器崩溃?
  2. 如果它确实是“故意”崩溃,那么设置超时时间之类的配置在哪里?
  3. 理想情况下,如果应用程序崩溃(使用主管?),应用程序会自行重启。牛仔是否为牛仔正在运行的应用程序提供内置管理器?