问题标签 [yaws]

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 回答
1093 浏览

erlang - 使用 Yaws 和 websockets 订阅数据

我有一个 gen_server 与几个硬件传感器通话。此设置工作正常。现在我想通过数据的实时可视化来扩展这个系统。我想通过 websockets 将这些数据传递给 web 客户端。

由于我可能有几个“听众”,例如几个人在不同的网络浏览器上可视化这些数据,我正在考虑类似于观察者模式的东西。每次 Web 客户端请求订阅传感器时,都应将其添加到该传感器的利益相关者列表中。一旦新的传感器数据到达,就应该立即将其推送给客户端。

我正在使用 yaws 来快速获取 websocket 功能。我的问题与偏航似乎工作的方式有关。在服务器端,我只在连接时通过A#arg.clisock值(例如#Port<0.2825>)“看到”客户端。在下面的代码中,我注册ws_server以在新数据从客户端输入时接收回调。在这一点之后,偏航似乎只允许我响应进入服务器端的消息。

这是回调模块的样子:

似乎,我无法对消息做出反应,subscribe <sensor>并且(在连接时间之后)动态地将这个利益相关者添加到观察者列表中。

如何使用 yaws 服务器完成向客户端异步推送数据以及在会话期间添加和删除我想收听的传感器。handle_message/2基本上最简单的方法是如果 yaws 可以用第一个参数回调From。否则我需要添加一个 ref 以在双方都保留一个 ref 并每次将其发送到服务器,看起来我需要保留该信息。

0 投票
3 回答
2522 浏览

rest - Erlang YAWS:如何测试一个简单的 REST Web 服务?

在一个简单的基于 Erlang YAWS 的 RESTful 应用程序中,我希望有一组测试将 HTTP 请求发送到 RESTful API,从服务器获取响应,然后测试这些响应。

如果每个“send-request-get-request-test”测试都可以在 EUnit 中运行(可以使用测试生成器),那就太好了。

我还希望能够使用rebar( make test) 运行这组测试。

最近我在另一个应用程序(Mochiweb)中使用过,但我发现它使用起来很麻烦 ibrowse

是否有任何其他选项可以编写可以将 HTTP 请求发送到 YAWS RESTful 应用程序的 Erlang/OTP 测试?最常见的方法是什么?

0 投票
1 回答
124 浏览

javascript - Erlang 中的 decodeURIComponent

我使用 encodeURIComponent 在客户端对我的数据进行编码。

如何在 yaws 服务器上对其进行解码?

0 投票
1 回答
273 浏览

php - 如何在 Erlide 中使用 YAWS - Erlang

我读过 Erlang 有一个内置的网络服务器(YAWS);我正在使用 Eclipse 插件 Erlide 开发 Erlang,我想知道如何访问这样的网络服务器,例如运行一个简单的“hello world”PHP 脚本;只是为了开始。

0 投票
2 回答
1452 浏览

webserver - 如何在 Mac OSX 上安装 YAWS

以下是在 Mac OSX 机器上安装 YAWS(Yet Another Web Server)的分步指南。它已在 10.6.8 SL 上进行了测试,并且运行良好,但如果您开始发送垃圾邮件 F5,则需要重新启动服务器。

0 投票
6 回答
1110 浏览

amazon-ec2 - 在 Ubuntu 12.04 上安装 Yaws 服务器(使用云服务)

我正在尝试让 Yaws Web 服务器在云服务(亚马逊 AWS)上运行。我已经在服务器上编译并安装了一个本地副本。我的问题是在端口 8000 或端口 80 上运行时,我无法让 Yaws 运行。

我在 yaws.conf 中有以下配置:

这会产生以下成功的启动/结果:

Eshell V5.8.5(使用 ^G 中止)

=INFO REPORT==== 16-Sep-2012::17:21:06 === Yaws:使用配置文件 /home/ubuntu/yaws.conf

=信息报告==== 16-Sep-2012::17:21:06 === Ctlfile : /home/ubuntu/.yaws/yaws/default/CTL

=INFO REPORT==== 16-Sep-2012::17:21:06 === Yaws:收听 <3> 虚拟服务器的 0.0.0.0:8000:- http://domU-12-31-39 -0B-1A-F6:8000 下 /home/ubuntu/yaws/www/trial -

=INFO REPORT==== 16-Sep-2012::17:21:06 === Yaws:收听 <1> 虚拟服务器的 0.0.0.0:4443:-

当我尝试访问 url (http://ec2-72-44-47-235.compute-1.amazonaws.com) 时,它永远不会连接。我尝试使用 paping 检查端口 80 或 8000 是否打开(http://code.google.com/p/paping/)并且我收到“无法解析主机”错误,所以显然不是在职的。

我还尝试将 yaws.conf 设置为端口 80,如下所示:

我收到以下错误:

=错误报告==== 2012 年 9 月 16 日::17:24:47 === Yaws: 无法收听 0.0.0.0:80 : {error,eacces}

=错误报告==== 2012 年 9 月 16 日::17:24:47 === 无法监听套接字:{error,eacces} =错误报告==== 2012 年 9 月 16 日::17: 24:47 === Top proc 死亡,终止 gserv =ERROR REPORT==== 16-Sep-2012::17:24:47 === Top proc 死亡,终止 gserv =INFO REPORT==== 16-Sep -2012::17:24:47 === application: yaws exited: {shutdown,{yaws_app,start,[normal,[]]}} 类型:永久 {"Kernel pid terminate",application_controller," {application_start_failure,yaws ,>>>>>>{关机,>{yaws_app,start,[正常,[]]}}}"}

我还使用 iptables 打开了 80 端口。运行 sudo iptables -L 给出以下输出:

Chain INPUT (policy ACCEPT) target prot opt source destination
ACCEPT tcp -- ip-192-168-2-0.ec2.internal ip-192-168-2-16.ec2.internal tcp dpt:http ACCEPT tcp -- 0.0 .0.0 任何地方 tcp dpt:http 接受所有 -- 任何地方 ctstate RELATED,ESTABLISHED 接受 tcp -- 任何地方 tcp dpt:http 接受 tcp -- 任何地方 tcp dpt:http

Chain FORWARD (policy ACCEPT) target prot opt source destination

Chain OUTPUT (policy ACCEPT) target prot opt source destination

谢谢你的耐心

0 投票
2 回答
329 浏览

couchdb - YAWS 页面中的 Couchbeam

我在这里是因为我试图在 YAWS 上使用 Couchbeam 表单。我已经测试了 CB,它在终端上正常工作,使用:

现在我正在尝试在我的网页上复制我在本地所做的事情。我相信问题是我不知道如何告诉 erl 从 yaws 页面执行 'erl -pa ebin -pa deps/ibrowse/ebin -s couchbeam'。

我试图简单地运行所有需要的应用程序,但我得到了这个:

这是我的erl代码:

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 相当不错,但对于这种快速、轻量级、短命、高率的民意调查情况似乎有点过头了,你怎么看?

0 投票
1 回答
504 浏览

erlang - 从 .ERL 调用函数到 .YAWS 文件

我对 YAWS 和 ERLANG 很陌生,想从不同的 .erl 文件调用一个函数到 YAWS 页面。

即我有一个名为webpage.yaws 的页面,并有另一个名为utilities.erl 的文件,并且想从webpage.yaws 中的utilities.erl 调用一个函数

有任何想法吗?

谢谢

0 投票
1 回答
302 浏览

erlang - 氮气 - 文件上传

我可以使用 Nitrogen 的元素轻松上传文件#upload{},效果很好。

但是,我正在使用客户端 Javascript 创建一个 html 文件上传表单(不使用#upload{}Nitrogen .erl 文件中的标签),但无法使其正常工作。

关于如何解决这个问题的任何想法?

编辑:我在 Yaws 上使用氮气。