问题标签 [libuv]

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

c - libuv 是否提供任何工具来将缓冲区附加到连接并重新使用它

我正在评估 libuv 作为我正在编写的 C/c++ 服务器的库。该协议以长度为前缀,因此只要我可以从流中读取一个 32 位整数,我就应该能够知道我应该分配什么大小的缓冲区。文档说 uv_read_start 函数可能会被多次调用。

UV_EXTERN int uv_read_start(uv_stream_t*, uv_alloc_cb alloc_cb, uv_read_cb read_cb);

由于我使用的是长度前缀协议,一旦我知道缓冲区的正确大小,我想分配它并将其重新用于后续读取,直到我收到所有字节。有没有一种简单的方法可以用 libuv 做到这一点?现在看来 uv_alloc_cb 函数必须处理这个问题。我可以将缓冲区与我的流对象相关联,而不是将其放在地图或其他东西中吗?

由于我使用的是长度前缀协议,所以我根本不想在堆上分配缓冲区,直到我可以读取前 4 个字节(32 位)。我是否可以在堆栈上分配一个大小为 4 的缓冲区并让 uv_read_cb 函数实际进行堆分配?uv_read_cb 函数是否作为 uv_read_start 函数的一部分同步调用?如果是这样,当我知道我的流还没有附加缓冲区时,我应该能够在堆栈上进行分配。

0 投票
2 回答
2967 浏览

c - 如何使用 libuv 编译最小程序?

自从我用 C 编写程序以来已经有一段时间了,即使如此,我仍然发现实际的编译和链接非常混乱。

由于我最近一直在玩/使用 node.js,我已经变得足够好奇,开始偷看引擎盖,目前正在研究 libuv。

我找到了一些优秀的指南,但发现实际的编译部分在很大程度上被跳过了。很可能是由于公平的假设,即有趣的人可能经常使用 gcc。

我已经从 gtihub 下载了最新的 libuv 作为 zip 并解压缩到一个工作文件夹中。我按照 README.md 编译并安装了它。这一切都很顺利,没有任何问题。

我要编译的代码来自http://nikhilm.github.io/uvbook/basics.html

我已将其保存为 main.c

这是我正在使用的 Makefile,我怀疑这是问题所在,因为它是从各种来源拼凑而成的,而且我在这方面的知识至少可以说是模糊的。

这是运行make的结果。

我意识到这并不完全特定于 libuv,但这正是我所在的地方,所以任何帮助将不胜感激。

我正在使用 Ubuntu 13.04

0 投票
0 回答
402 浏览

r - 如何集成 Rook 类和 httpuv

我正在尝试使用 httpuv 运行一些 Rook 类(例如MiddlewarebuilderBreweryfile),因为我知道 Web 应用程序是“按照 Rook 规范实现的”。(来自 httpuv 文档)。

但是,似乎并非所有 Rook 规范都在 httpuv 包中实现。

虽然 Rook 有 Web 服务器(Rhttpd),但 httpuv 提供了更多的性能(基于 Libuv)并具有这样的 webSockets。

所以,我的问题是,有没有人尝试过将这些提到的类与 httpuv 一起使用?是否有人知道可能有助于这种集成的站点、博客或任何文档?

我所知道的是加载 httpuv 和 Rook 并运行 httpuv 服务器。

现在,我如何使用和集成 Rook 类(如MiddlewarebuilderBreweryfile)来编写webapp

0 投票
2 回答
1591 浏览

node.js - libuv 在内部使用阻塞文件系统调用——为什么?如何?

我刚刚了解到 Node.js 皇冠上的宝石libuv使用阻塞系统调用进行文件操作。异步行为是用线程实现的!这提出了两个问题(我关心 Unix):

  1. 为什么它不像网络那样使用非阻塞文件系统调用?
  2. 如果有一百万个未完成的文件读取,它可能不会启动一百万个线程...... libuv 是做什么的?
0 投票
3 回答
20485 浏览

node.js - 什么是 node.js 绑定?

我对 node.js 很陌生,我似乎无法在任何地方找到关于 node.js 绑定的定义。我在幻灯片和 nodejs 演讲中看到过这个术语,但从未明确解释过。谁能帮我澄清这个概念?我附上了我所指的图片。在此处输入图像描述

0 投票
2 回答
1190 浏览

c++ - libuv worker threads or work queue health check?

In libuv, you can end up tying up the worker threads with too much work or buggy code. Is there a simple function that can check the health of the worker threads or thread queue? It doesn't have to be 100% deterministic, after all it would be impossible to determine whether the worker thread is hanging on slow code or an infinite loop.

So any of the following heuristics would be good:

  • Number of queued items not yet worked on. If this is too large, it could mean the worker threads are busy or hung.

  • Does libuv have any thread killing mechanism where if the worker thread doesn't check back in n seconds, it gets terminated?

0 投票
1 回答
509 浏览

c - 同时卷曲多个获取网址

我正在尝试制作一个可以一次获取多个 URL 的程序。我正在使用这个 libcurl 和 libuv http://curl.haxx.se/libcurl/c/multi-uv.html的示例代码

当我编译它并向程序传递一些 URL 时,例如

它工作正常,我立即得到结果。但是,当我传递更多参数时,例如 100 个 URL,几分钟内根本没有返回任何内容。尝试并行获取多个页面时是否有锁定的原因?

0 投票
0 回答
416 浏览

c - UDP C 应用程序中的 libuv 计时器回调随机触发

我使用封装在 DLL 中的 libuv UDP 功能。它有效,我可以通过回调发送和接收数据包。现在我需要一个功能来在一段时间后停止我的接收观察者(例如,当没有客户端可用时)。但是当我将超时设置为 10 秒时。计时器回调是随机触发的(例如 0、4、7、10 秒)。我尝试对 UDP 和计时器使用两个不同的循环,但没有改变。是否有用于准确计时的特殊调用约定?

我的初始化函数是:

我的 UDP 发送函数发送实际数据包并启动 UDP 和计时器观察者:

定时器回调停止定时器观察者和(如果没有数据包到达)UDP接收观察者:

0 投票
1 回答
1362 浏览

c++ - 如何存储对函数的引用,以便稍后在 node.js C++ 插件模块中调用它?

这是我用 C++ 编写并使用 node-gyp 构建的 node.js 插件模块。当 StoreFunction 我试图存储一个指向函数的指针,以便以后可以使用它

当我稍后尝试在 InvokeFunction 中调用它时,我得到一个分段错误。如果我检查了两个函数中的指针(使用 cout)它们是相同的值,这让我感到困惑。

所以我猜测调用两个函数之间调用上下文的变化或者我不明白我指的是什么。

所有(ummmmmm)指针都非常感谢我在这里收到的问题........

当然还有一些调用js…………

0 投票
1 回答
289 浏览

node.js - 如何在另一个线程中创建 V8 对象,然后将其复制回 nodejs 范围?

我必须将很长的 JSON 文本解析为 JSON 对象。我尝试使用以下代码测量执行时间。

它大约需要 0.5 毫秒,这相当多。由于 nodejs 的 V8 引擎是单线程的,如果这个操作如此繁重和频繁,吞吐量将受到很大影响。

因此,我打算在 C 中编写一个异步 JSON.parse 作为 NodeJS 原生插件,uv_queue_work用于让繁重的操作发生在另一个线程中,使用多核并避免占用 nodejs 主循环。

问题是,nodeJS 中的 V8 对象不允许从主线程以外的其他线程访问。

有什么方法可以解析文本并在另一个线程中创建 V8 对象,然后将新创建的 V8 对象复制到主线程中?