问题标签 [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 投票
0 回答
1111 浏览

c++ - 如何在本机 C++/nodejs 插件中实现异步构造函数/工厂调用?

我对 C++ 和 node/v8 插件开发很陌生。

我正在尝试包装一个 3rd Party C-Library。一些初始化函数运行时间很长,我想异步运行这些操作(在 libuv 的帮助下)。

鉴于我有以下代码:

我想createStructIn3rdPartyLib(&cStruct);在 libuv 库的帮助下运行。

以下是我想出的。不幸的是,它给了我一个分段错误,我不确定它是否是正确的方法。我已经查看了其他本机节点插件的来源,但没有找到任何解决我的问题的方法。:(

欢迎任何提示。

谢谢!!!

编辑: 我在阅读了更多像node-ogg 绑定这样的例子之后,我越来越想我的方法走错了路。也许我应该在 C/C++ 端保持低得多的水平,并在 javascript 端实现对象功能。

0 投票
1 回答
852 浏览

c - 用于游戏服务器的 uvlib

我知道有一些后台线程,它们执行 IO 操作等,然后调用我的回调。是否在一个线程中调用所有回调(= 不能同时执行两个回调)?例如,当数据来自套接字连接时,应该调用传递给uv_read_start( ) 的回调。echo_read总是echo_read在主线程中调用,而那些后台线程仅用于缓冲来自该套接字的数据?我想用 来创建游戏服务器libuv,但实际上我需要确定,一次只处理一个游戏数据包,而不是更多(否则会有很多同步问题,我可能需要从地面)。

0 投票
1 回答
1954 浏览

libuv - libuv - 如何停止在另一个线程中运行的 tcp 服务器

例如我有2 个线程。我想从主线程(线程 1)停止服务器。

线程1:主程序

线程 2:TcpServer

来自 libuv 库:

这意味着,如果我uv_stop(tcp_server_loop)在主线程中调用并且服务器循环将因为 tcpserver 上没有事件而被阻塞,那么服务器将仍然在循环中,直到某个事件出现。uv_stop(它可能会在循环进入块模式以等待新事件之前检查是否被调用)。

0 投票
1 回答
429 浏览

sockets - 如何让应用程序进程等到套接字有数据要使用 libevent bufferevents 读取?

我第一次使用 libevent,并且在尝试让我的应用程序在调用读取回调之前不运行时遇到了问题。我也在使用缓冲事件。本质上,我正在尝试避免主应用程序循环中的睡眠,而是让操作系统在有数据要从套接字读取时唤醒进程(通过 libevent)。有人知道怎么做吗?我在 libevent 的 alpha 版本中发现,您可以将基本事件循环设置为 EVLOOP_NO_EXIT_ON_EMPTY,但是通过查看 libevent 代码,我相信它只会用完我的整个过程。我也读过这个质疑将套接字设置为在 Windows 上阻塞是一个坏主意,这就是为什么我也没有将其作为解决方案的原因。我也会用 libuv 和 libev 标记它,因为它们相似并且可能有助于我的解决方案。

0 投票
1 回答
1851 浏览

c++ - libuv - 如何保持默认循环运行,直到程序中的至少一个线程处于活动状态?

server调用后将在新线程中启动start(服务器有自己的循环)。问题是程序立即结束,因为默认循环上没有注册事件。我想要的是pthread_join通过uv_default_loop. 我想避免join在所有对象上调用一些自定义方法,这些对象应该在单独的线程中运行,以保持主线程处于活动状态。

main函数的重要部分:

主功能:

已解决:我找到了这个主题,这真的很好
https://groups.google.com/forum/#!topic/nodejs/Sob97-QbtlA 解决方案是每个新线程都应该注册uv_async_tuv_default_loop()所以如果至少有一个活动线程。uv_close当线程应该退出时,它可能只是uv_async_t在主循环中注册。

0 投票
1 回答
481 浏览

windows - 在没有 tty 的情况下访问 CONIN$

我正在尝试访问从控制台接收输入的文件描述符。我目前正在使用

并将 fd 返回到从控制台读取(基于 libuv)输入的程序。

当进程在控制台中执行时,这工作正常,但是当我将输入管道输入到程序中时,从 fd 读取崩溃

我怀疑没有与输入过程关联的控制台,但我不确定。以这种方式执行时,如何正确地将输入读入 cmd 窗口?


所以我在 Node.js 中绑定到这个 C++ 程序。我打电话

opentty 在文件句柄的重定向输入模式下返回 3。处理这个文件句柄的代码可以在这里找到

https://github.com/joyent/node/blob/master/src/tty_wrap.cc#L185

本质上是uv_tty_init在这里找到的

https://github.com/joyent/node/blob/master/deps/uv/src/win/tty.c#L99

流错误Error: read EBADF,系统调用:读取

0 投票
2 回答
505 浏览

c - C 优化:条件存储以避免弄脏缓存行

libuv 源码中,我找到了这段代码:

有人可以解释一下吗?

缓存线到底是什么?

另外,我猜条件存储是一些汇编程序指令,它检查某些内容,如果成功,则写入一些值。正确的?

这种结构什么时候有意义?我想并非总是如此,否则编译器只会使用条件存储,对吧?

0 投票
3 回答
1676 浏览

c - libuv tcp 连接问题

我有以下代码:

我只想启动这台服务器并(通过 telnet 或浏览器)连接到这台服务器。一切似乎都很好,除了第一个连接总是在其中打印“新连接”字符串,on_new_connection但我开始的任何新 telnet 会话都不会打印新连接。我错过了什么?似乎 on_new_connection 回调只被调用一次,为什么?

0 投票
1 回答
1485 浏览

c++ - Node JS 原生模块:您可以在单独的 Libuv/NodeJS 样式进程中运行 C/C++ 方法吗?

这个有点奇怪……

我编写了一个大多数时候运行良好的 NodeJS 本机模块,但是该类包含一个在共享内存的上下文中运行时会破坏模块的方法。

粗略地说,该模块打开了一个 IO 服务器,但是有一个错误需要我打开和关闭 IO 服务器以检索特定值...当我执行此操作时,找到引用旧 IO 服务器对象的任何指针显然会中断/ segfault(“涂鸦空间”错误,对吧?)。

为了解决这个问题,我目前使用 NodeJS 的 child_process.fork() 在隔离上下文中运行 errant 方法,并在主进程和分叉进程之间传递消息以使程序按要求运行(即我调用里面的方法分叉的进程,并使用 'process.on("message", ...)' 检索结果)。这很好用,但感觉就像一个非常昂贵的黑客......

作为记录,我尝试使用 Libuv 线程来运行该方法,但我遇到了同样的问题。我猜那是因为函数调用仍然是在共享内存中进行的。

无论如何,我是否可以使用 C++ 在“NodeJS 风格”进程​​中运行一小部分(或更多......)C/C++ 代码?

0 投票
2 回答
1565 浏览

libuv - 无法构建 libuv

我正在尝试在 Debian 机器上构建 libuv 0.11.24。我试过了:

我收到此错误: