Tag: v8

如何编写利用线程的Node.js代码?

所以这是我对节点如何工作的理解: 所有JS代码都在其中执行的单线程。 IO /networking调用在场景后面使用线程池。 (使用libuv这是一个C ++库) 一旦IO操作完成,它的callback被压入callback队列,并且callback可以被下一个滴答中的事件循环拾取。 我想了解的是如何编写可以利用系统线程的代码? 我在C / C ++中编写一个库,并提供一个JavaScript的绑定? 比方说,我有一些不需要IO但是CPU密集的操作/function,所以我想在多个线程中运行它。 我将如何做到这一点在节点?

如何将图像数据从node.js传输到html5canvas?

我正在尝试构build一个演示,它是一个node.js C ++插件。 在node.js我得到一个位图,这是在ARGB格式,我需要将其传递到HTML5canvas。 我正在试图find最有效的方式来做到这一点,因为它是痛苦的缓慢。 目前我做了以下几点: — in node.js — – Convert ARGB to RGBA (because ImageData accepts that format) – Create v8::ArrayBuffer (wrapper over the underlying buffer) – Create v8::Uint8ClampedArray (wrapper over the array buffer) – Return an object which has the Uint8ClampedArray, width and height — in the browser — – Get the […]

swig – c ++到javascript

我试图build立一个简单的JavaScript模块使用我的CPP文件的swig。 我跑了所有正确的命令,但似乎没有任何工作。 这是我的.h文件 #pragma once class Die { public: Die(); Die(int a); ~Die(); int foo(int a) ; Die* getDie(int a); int myVar; }; 我的.cpp文件: #include <iostream> #include "example.h" int Die::foo(int a) { std::cout << "foo: running fact from simple_ex" <<std::endl; return 1; } Die::Die(){} Die::Die(int a){myVar = a;} Die::~Die(){} Die* Die::getDie(int a) { return new […]

原生JS Promise的这种用法是否会导致Node.js中的内存泄漏?

这里是我有的代码的示例代表。 我有一个UDP接收器,它会连续收到大量的数据包。 这是股市现场数据。 这应该给一些关于数据包量的想法。 根据收到的数据,更新到一个MySQL数据库和另一个到MongoDB。 然而,这个代码泄漏内存就像任何东西,并在大约12分钟内与7.5GB内存的EC2机器上的OOM错误崩溃。 这个崩溃是非常一致的。 我读了几个关于与Promise链接或recursion调用Promise相关的内存泄漏的stackoverflow问题和github问题。 我觉得我的代码不适合这个描述,因此想知道这个代码是否也会导致内存泄漏。 当我将这整个代码改变为没有Promises和callback的时候,内存消耗接近1%。 没有泄漏。 我正在使用当前稳定版本的Node.js(v6.9.5 LTS)。 使用原生Promise,没有像Bluebird这样的库 const dgram = require('dgram'); const receiver = dgram.createSocket('udp4'); const myObject = require('./myObject.js'); receiver.on('message', function(payload, sender) { myObject.processPayload(payload); }); receiver.bind(PORT); // In mObject.js var myObject = { processPayload: function(payload) { var updateDoc = doSomethingToPayload(payload); // Mongo npm package offers APIs which return […]

如何设置nodejs v8选项来执行好?

我了解到,如果我在小内存机器上运行NodeJs和其他软件(imagemagick …) 我可以运行node –global_gc your_script.js 我不会得到OOME 当我运行node –v8-options时,我看到很多node –v8-options 但我找不到任何文件? 有什么重要的选项,我应该知道扩展我的Nodejs?

从C ++ Node.js插件渲染文件

我想从C ++插件渲染node.js中的文件。 我想要应用一些文件处理,并通过node.js将输出呈现给浏览器 这是我的C ++代码 std::ifstream in(filename, std::ios::binary); in.seekg (0, in.end); int length = in.tellg(); in.seekg (0, in.beg); char * buffer = new char [length]; in.read (buffer,length); in.close(); return buffer; 以下是为node.js添加绑定的V8代码,这里的缓冲区是上述c ++代码的输出。 Local<Function> cb = Local<Function>::Cast(args[1]); const unsigned argc = 1; Local<Value> argv[argc] = {Local<Value>::New(String::New(buffer))}; cb->Call(Context::GetCurrent()->Global(), argc, argv); 此代码适用于正常的文本文件。 阅读具有Unicode字符的文本文件时遇到问题。 例如, 原始文本文件 test start Billél […]

另一个pthread中的V8代码会导致段错误

为什么这段代码会带来SEGFAULT? int jack_process(jack_nframes_t nframes, void *arg) { Local<Value> test = Local<Value>::New( Number::New(2) ); return 0; } jack_process正在另一个pthread中运行。 我怎样才能做到这一点? 如何在另一个pthread中运行V8代码? 请注意,这段代码没有任何段错误。 int jack_process(jack_nframes_t nframes, void *arg) { Local<Value> test; return 0; } 谢谢。

即使使用率保持不变,Node.JS V8堆也会快速增长

我正在运行一个Node.JS的Web应用程序,工作几个小时,然后在一些随机的时间点,V8堆突然开始迅速增长,没有任何理由,大约40分钟后,这种增长通常停止,进程继续正常运行。 我用nodetime监视这个: 这可能是什么原因? 在我的程序中是内存泄漏还是V8中的一个bug?

如何将数据从casperJS传递到nodeJS?

我在casperJS中构build了一个刮板,用于从Google+页面中提取数据。 它工作出色。 现在我想能够在我的nodeJS服务器中添加一个API GET调用,它将抓取这些数据并以JSON格式返回。 除了在这里的testing场景,我没有find任何关于如何完成这个任务的文档或内容。 还有一些鬼怪 ,但在9个月内还没有更新,人们都说它很破碎。 任何指导,使之成为可能将不胜​​感激。

调用处理程序数据的垃圾回收

我试图提供数据给函数调用处理程序,但我无法正确地收集垃圾。 如果我注释掉包含“ tpl->SetCallHandler(callFn, external); ”的行,则调用ObjWeakCallback 。 该函数从来没有被收集,但(至lessFnWeakCallback从来没有被调用,不pipe是什么)。 请注意,静态数据不是一个选项,因为这需要准备好每个进程的多个隔离。 isolate->setData也不是一个选项。 我完全错过了什么吗? 在v8::Function存储数据的正确方法是什么? 编辑:让我重新说明这个问题,以更好地描述我的意图… 我想创build一个函数模板(因为我需要使用它作为JS端的构造函数)。 我需要一些方法来发送一个void *给它的调用处理程序,但是这个数据必须是垃圾回收。 关于我到目前为止一直在尝试的一些笔记: 使用Function::New(isolate, callHandler, External::New(isolate, data))工作,但不提供JS端构造函数的function(对于创build的对象不可能用SetInternalFieldCount) FunctionTemplate::New(isolate, callHandler, External::New(isolate, data))提供了将数据传递给调用处理程序的能力,但是从不被垃圾回收(下面的工作示例) 我尝试使用一个普通的函数,并返回一个新创build的Object ,但接下来的假设new Fn() instanceof Fn失败 #include <v8.h> #include <iostream> // made static, just to simplify the example and prevent crashes // the persistents would normally be wrapped inside a "baton" together […]