javascript

java

python

c#

android

c++

node.js

php

html

jquery

ios

reactjs

css

.net

git

ruby-on-rails

sql

c

ruby

string

使用Socket.IO + Node.js + ZMQ发出消息时内存泄漏

我有三个应用程序互相交谈。 Websocket服务器(1)接受来自浏览器的连接,解析url以查看所需的数据,如果内存中有数据,则将其提供给客户端,如果没有,则从另一个称为“提取程序”(fetcher)的应用程序中请求它。 Fetcher接收此作业,从简单的API(3)请求该作业,该API返回JSON数据,然后将其发送回websocker服务器,然后将其发布到连接的客户端。 然后,“ Fetcher”开始定期检查该url / job是否有更新,并将新数据发送到websocket服务器。

我使用socket.io进行客户端Websocket服务器通信。 Websocket服务器和访存器通过ZMQ套接字进行对话。

我用130个连接加载测试websocket服务器。 Websocket服务器每秒向130个客户端发布160KB的数据。 最初,它使用170mb的RAM进行130个连接,但是尽管没有新的连接,它很快就增加到1GB。 然后socket.io的心跳信号开始失败,导致连接断开。

我使用Nodetime拍摄堆快照。 在第130个客户端连接之后,以下是内存的外观:

enter image description here

346个缓冲区对象,总计44MB。

在四分钟内,Buffer对象的数量急剧增加(再次,没有新连接):其中有3012个对象,总内存为486MB。 再过10分钟后,共有3535个内存,总内存消耗为573MB。

我使用Mozilla的memwatch找出添加到内存中的行,并发现此功能:

function notifyObservers(resourceId) {
  var data = resourceData[resourceId];
  io.sockets.in(resourceId).emit('data', data);
}

如果我将这些行注释掉,则内存使用率保持不变,因此这是另一个确认。

任何想法如何发生? 我在ZMQ的订户套接字方法中调用此函数,并且我怀疑它与此有关。.如果删除函数并将它们合并为一个,则将生成以下代码:

// Receive new resource data
const resourceUpdatedSubscriber = zmq.socket('sub').connect('tcp://localhost:5433');
resourceUpdatedSubscriber.subscribe('');

resourceUpdatedSubscriber.on('message', function (data) {
  var resource = JSON.parse(data);

  resourceData[resource.id] = resource.data;

  io.sockets.in(resourceId).emit('data', resourceData[resource.id]);
});

我所有的代码(包括负载测试)都是公开的,您可以在以下位置找到此Web套接字服务器:[https://github.com/denizozger/node-socketio/blob/master/server.js]参见第138行。

我从两个月前开始学习Javascript和Node.js,因此欢迎提出任何意见,谢谢!

trans by 2020-07-19T10:30:34Z

我可以通过JNI从Node.js调用Java吗?

如何通过JNI从Node.js调用Java? 有没有例子?

trans by 2020-07-19T05:20:45Z

javascript-因果报应/茉莉花超时没有运行测试

我正在尝试在Grunt生成的项目上运行Grunt的Karma / Jasmine[http://newtriks.com/2013/12/31/automating-react-with-yeoman-and-grunt/]

Karma启动PhantomJS(或Chrome),并且取决于singleRun,它要么超时,要么就坐在那里,什么也不做。 我曾尝试根据有类似问题的人提供的解决方案来更改2972633186251047047936和browserNoActivityTimeout,但这似乎不起作用。

我相关的软件包版本等:

  • NodeJS的:0.10.25
  • 业力:0.12.16
  • Webpack:1.1.11
  • webpack-dev-server:1.4.1
  • 业力茉莉:0.1.5
  • 的Linux:Ubuntu 14.04

我在OS X上发现了同样的问题:

我尝试将所有开发依赖项更新到最新版本,但问题仍然存在。

我的控制台输出如下。 现在,指向bundle的webpack行是VALID / INVALID令人担忧,但我找不到有关其含义的任何信息。 这是我的控制台输出:

Running "karma:unit" (karma) task
DEBUG [config]: autoWatch set to false, because of singleRun
DEBUG [plugin]: Loading karma-* from /home/ed/workspace/wwb-app/node_modules
DEBUG [plugin]: Loading plugin /home/ed/workspace/wwb-app/node_modules/karma-chrome-launcher.
DEBUG [plugin]: Loading plugin /home/ed/workspace/wwb-app/node_modules/karma-coffee-preprocessor.
DEBUG [plugin]: Loading plugin /home/ed/workspace/wwb-app/node_modules/karma-firefox-launcher.
DEBUG [plugin]: Loading plugin /home/ed/workspace/wwb-app/node_modules/karma-html2js-preprocessor.
DEBUG [plugin]: Loading plugin /home/ed/workspace/wwb-app/node_modules/karma-jasmine.
DEBUG [plugin]: Loading plugin /home/ed/workspace/wwb-app/node_modules/karma-phantomjs-launcher.
DEBUG [plugin]: Loading plugin /home/ed/workspace/wwb-app/node_modules/karma-requirejs.
DEBUG [plugin]: Loading plugin /home/ed/workspace/wwb-app/node_modules/karma-script-launcher.
DEBG [plugin]: Loading plugin /home/ed/workspace/wwb-app/node_modules/karma-webpack-plugin.
INFO [karma]: Karma v0.12.16 server started at  http://localhost:8080/
INFO [launcher]: Starting browser PhantomJS
DEBUG [temp-dir]: Creating temp dir at /tmp/karma-98204612
DEBUG [launcher]: /home/ed/workspace/wwb-app/node_modules/karma-phantomjs-launcher/node_modules/phantomjs/lib/phantom/bin/phantomjs /tmp/karma-98204612/capture.js
Hash: 89285186567c1bc5bb7f
Version: webpack 1.1.11
Time: 2ms
Asset  Size  Chunks       Chunk Names
webpack: bundle is now VALID.
webpack: bundle is now INVALID.
DEBUG [web-server]: serving: /home/ed/workspace/wwb-app/node_modules/karma/static/client.html
DEBUG [web-server]: serving: /home/ed/workspace/wwb-app/node_modules/karma/static/karma.js
DEBUG [web-server]: upgrade /socket.io/1/websocket/CjC8pnQq5It2z_kWYB98
DEBUG [karma]: A browser has connected on socket CjC8pnQq5It2z_kWYB98
INFO [PhantomJS 1.9.7 (Linux)]: Connected on socket CjC8pnQq5It2z_kWYB98 with id 98204612
DEBUG [launcher]: PhantomJS (id 98204612) captured in 1.704 secs
WARN [PhantomJS 1.9.7 (Linux)]: Disconnected (1 times), because no message in 30000 ms.

DEBUG [karma]: Run complete, exitting.
DEBUG [launcher]: Disconnecting all browsers
DEBUG [launcher]: Process PhantomJS exited with code 0
DEBUG [temp-dir]: Cleaning temp dir /tmp/karma-98204612
Warning: Task "karma:unit" failed. Use --force to continue.

Aborted due to warnings.

这是我的karma.conf.js文件:

'use strict';

module.exports = function (config) {
config.set({
    basePath: '',
    frameworks: ['jasmine'],
    files: [
        'test/helpers/**/*.js',
        'test/spec/components/**/*.js'
    ],
    preprocessors: {
        'test/spec/components/**/*.js': ['webpack']
    },
    webpack: {
        cache: true,
        module: {
            loaders: [{
                test: /\.css$/,
                loader: 'style!css'
            }, {
                test: /\.gif/,
                loader: 'url-loader?limit=10000&minetype=image/gif'
            }, {
                test: /\.jpg/,
                loader: 'url-loader?limit=10000&minetype=image/jpg'
            }, {
                test: /\.png/,
                loader: 'url-loader?limit=10000&minetype=image/png'
            }, {
                test: /\.js$/,
                loader: 'jsx-loader'
            }]
        }
    },
    webpackServer: {
        stats: {
            colors: true
        }
    },
    exclude: [],
    port: 8080,
    logLevel: config.LOG_DEBUG,
    colors: true,
    autoWatch: true,
    // Start these browsers, currently available:
    // - Chrome
    // - ChromeCanary
    // - Firefox
    // - Opera
    // - Safari (only Mac)
    // - PhantomJS
    // - IE (only Windows)
    browsers: ['PhantomJS'],
    reporters: ['progress'],
    captureTimeout: 60000,
    browserNoActivityTimeout: 60000,
    singleRun: true
});
};
trans by 2020-07-19T01:01:43Z

node.js-如果我使用像express这样的节点服务器,是否需要webpack-dev-server

我正在关注一些教程,以使用Express和React构建同构应用程序。 我对webpack-dev-server感到困惑。

Webpack教程介绍了有关webpack-dev-server的信息:

这将在localhost:8080上绑定一台小型快速服务器,该服务器为您的静态资产以及捆绑包(自动编译)提供服务。

重新编译捆绑软件(socket.io)后,它将自动更新浏览器页面。 在浏览器中打开[http:// localhost:8080 / webpack-dev-server / bundle]。

既然我有快递服务器,我真的需要webpack-dev-server吗? 或使用它的优缺点是什么? 如果我要使用react-hot-loader,是否有必要使用webpack-dev-server?

trans by 2020-07-18T14:53:30Z

java-如何使用Maven部署Node.js应用程序?

我们的大多数团队都由Java开发人员组成,因此,整个构建/部署/依赖项管理系统都是基于Maven构建的。 我们使用CI,因此每个构建过程都运行单元测试(w。karma和phantomJS用于前端,而jasmine-node用于后端)。 我已经设法为此配置了业力Maven插件。

这不能解决从build上的package.json下载node.js依赖项的问题。 我需要在现有环境中部署我的node.js / express应用程序,因此理想的情况是:

  1. 从仓库中拉出(通过maven build自动完成)
  2. npm install(即-从节点程序包注册表中下载依赖项)
  3. 运行测试

我试图为maven找到一个nodejs软件包,但是说实话-作为一个node.js开发人员,我在选择正确的工具时并不十分自信,因为我无法从中区分出不良的maven插件。 体面的

也许使用外壳程序插件并从终端调用npm install是更好的选择?

你怎么看?

trans by 2020-07-18T14:40:31Z

node.js-Socket.io连接的用户社区

我终于让socket.io正常工作,但是遇到了一个奇怪的问题。

我不确定这是否是最好的方法,但是我正在使用:

io.sockets.clients().length

这将返回连接到我的服务器的客户端数量。 问题是在连接和断开用户数之后,该数字开始保持高于应有的水平。

例如,如果我连接并要求我的朋友加入,则该数字会增加,这是正确的。 但是,当我们开始断开连接并重新连接时,数量并没有减少。

我正在vmware ubuntu服务器上运行node.js和sockets.io服务器。

有谁知道这是为什么,或者有更好的方法来找出有多少人连接到服务器?

trans by 2020-07-18T13:54:12Z

node.js-Nodejs子进程:从已初始化的进程写入标准输入

我正在尝试使用节点的child_process产生一个外部进程child.stdin.write,然后在初始化该进程后将信息发送到该进程,这可能吗?

我有以下代码:

var spawn = require('child_process').spawn,
    child = spawn('phantomjs');

child.stdin.setEncoding = 'utf-8';
child.stdout.pipe(process.stdout);

child.stdin.write("console.log('Hello from PhantomJS')");

但是,我在stdout上获得的唯一信息是phantomjs控制台的初始提示。

phantomjs> 

因此,似乎child.stdin.write没有任何效果。

我不确定在初始生成后是否可以将其他信息发送给phantomjs。

提前致谢。

trans by 2020-07-18T11:43:46Z

node.js-使用restify时如何支持cors

我有一个使用restify模块创建的REST api,我想允许跨域资源共享。 最好的方法是什么?

trans by 2020-07-18T10:01:24Z

node.js-什么是Procfile? 和Web和W

是否有必要在Procfile中提供“工人”信息? 如果是,那么实际上是什么-找不到关于此的漂亮文章。 我希望你们有想法。 我已经在Procfile中添加了web:节点server / server.js详细信息。 任何帮助,将不胜感激!

trans by 2020-07-18T02:53:04Z

亚马逊网络服务-当我尝试向我的S3存储桶(Node.js)发送内容时,AWS缺少凭据

he i!

从昨天开始我就遇到了这个问题,我在寻找解决方案时遇到了麻烦。

我正在尝试向我的S3存储桶发送内容,但是当我尝试以下操作时,此消息会出现在控制台中:

{ [CredentialsError: Missing credentials in config]
  message: 'Missing credentials in config',
  code: 'CredentialsError',
  errno: 'Unknown system errno 64',
  syscall: 'connect',
  time: Thu Oct 09 2014 14:03:56 GMT-0300 (BRT),
  originalError: 
   { message: 'Could not load credentials from any providers',
     code: 'CredentialsError',
     errno: 'Unknown system errno 64',
     syscall: 'connect',
     time: Thu Oct 09 2014 14:03:56 GMT-0300 (BRT),
     originalError: 
      { code: 'Unknown system errno 64',
        errno: 'Unknown system errno 64',
        syscall: 'connect',
        message: 'connect Unknown system errno 64' } } }

这是我的代码:

var s3 = new AWS.S3();
AWS.config.loadFromPath('./AwsConfig.json'); 

    s3.putObject(params, function(err) {
        if(err) {
            console.log(err);
        }
        else {
            console.log("Succes");
        }
});

凭据正确。 有人知道会是什么吗? 我正在搜索,但找不到任何解决方案。


我的凭据(假):

{
    "accessKeyId": "BLALBLALBLALLBLALB",
    "secretAccessKey": "BLABLALBLALBLALBLLALBLALLBLALB",
    "region": "sa-east-1",
    "apiVersions": {
      "s3": "2006-03-01",
      "ses": "2010-12-01"
    }
}

编辑:

为了获得帮助,所有代码:

var fs = require('fs');
var AWS = require('aws-sdk');


var s3 = new AWS.S3();
AWS.config.loadFromPath('./MYPATH.json'); //this is my path to the aws credentials.


var params = {
        Bucket: 'testing-dev-2222',
        Key: file,
        Body: fs.createReadStream(file)
    };

s3.putObject(params, function(err) {
    if(err) {
        console.log(err);
    }
    else {
        console.log("Success");
    }
});

新错误:

Error uploading data:  { [PermanentRedirect: The bucket you are attempting to access must be addressed using the specified endpoint. Please send all future requests to this endpoint.]
  message: 'The bucket you are attempting to access must be addressed using the specified endpoint. Please send all future requests to this endpoint.',
  code: 'PermanentRedirect',
  time: Thu Oct 09 2014 14:50:02 GMT-0300 (BRT),
  statusCode: 301,
  retryable: false }
trans by 2020-07-17T17:25:30Z

node.js--configuration.output.path:提供的值“ public”不是绝对路径! 与Webp

我正在使用基于WebPack的Laravel Mix。

我有它的工作,现在,它失败了:

Invalid configuration object. Webpack has been initialised using a configuration object that does not match the API schema.
- configuration.output.path: The provided value "public" is not an absolute path!

如果删除webpack.mix.js内容,它仍然会以相同的方式失败。

您能帮我调试此错误吗,我不知道如何继续。

我已经删除了node_modules文件夹,并运行npm install,但仍然失败。

知道我该如何解决吗?

trans by 2020-07-14T12:45:23Z

node.js-节点控制台为什么不显示功能代码?

在Google Chrome控制台中,如果我键入fn(其中fn是一个函数),那么我会得到fn的代码。在Node控制台中,键入require.resolve只是打印出来

[Function]

为什么我没有得到函数定义?

trans by 2020-07-14T02:00:40Z

Node.js中的Zip存档

我想创建一个zip归档文件并将其解压缩到node.js中。 我找不到任何节点实现。请帮忙。

trans by 2020-07-13T21:30:23Z

node.js-nvm ls-remote命令导致“ N / A”

我正在尝试使用nvm安装Node,但是当我键入任何版本时,它都不可用。 当我键入nvm ls-remote时,我只会得到“ N / A”。

我可以访问Internet,所以我不知道会发生什么。

trans by 2020-07-13T19:09:11Z

如何在Node.js中最好地创建RESTful API

我是Node(以及所有后端Web开发)的初学者,并且我已经开始在Node中编写RESTful API。 我正在尝试做一些事情。

我的应用程序使用Express和Mongoose,并且正在使用express-resource模块轻松地为API资源创建CRUD路由。 但是有些事情我不满意,并且认为我可以做得更好。

第一个是猫鼬。 如果我想为我的API编写测试,则无法对Mongoose进行存根以使其强制进入内存数据。 但是,所有教程似乎都指向猫鼬,但我真的不确定应该使用什么。

其次,我的资源似乎有很多样板代码。 这真的是在Node.js中创建RESTful API的最佳方法吗? 还有其他模块可以帮助我创建CRUD路由吗? 我相信您可以直接从架构中创建CRUD路由,而无需任何代码,但是我真的不确定如何。

我已经看到了诸如Tower.js和CompoundJS(正式称为RailwayJS)之类的项目,这些项目似乎是解决这些问题的综合解决方案,远远超出了我的问题。 也许我应该使用它们,但是我真的只希望Node.js应用程序成为API,仅此而已。 我正在独立于API处理前端。

为了提供一些背景,这是我目前的情况。 目前,我在Mongoose中定义了一个模型:

var mongoose = require('mongoose')
  , Schema = mongoose.Schema
  , Link

var LinkSchema = new Schema({
  uri: String,
  meta: {
    title: String,
    desc: String
  },
  shares: [{
    uid: Schema.Types.ObjectId,
    date: Date,
    message: String
  }]
})

Link = module.exports = mongoose.model('Link')

接下来,我定义CRUD路由的控制器:

var mongoose = require('mongoose')
  , _ = require('underscore')
  , Link = mongoose.model('Link')

exports.load = function (req, id, fn) {
  Link.findById(req.params.link, function (err, link) {
    if (err) {
      return res.send(err)
    }

    fn(null, link)
  })
}

exports.index = function (req, res) {
  var filterByUser = req.query.user ? { 'shares.uid': req.query.user } : {}

  Link.find(filterByUser, function (err, links) {
    if (err) {
      return res.send(err)
    }

    res.send(links)
  })
}

exports.create = function (req, res) {
  var link = new Link(req.body)

  link.save(function (err) {
    if (err) {
      // TODO: send 404
      return res.send(err)
    }

    res.send(link)
  })
}

exports.show = function (req, res) {
  res.send(req.link)
}

exports.update = function (req, res) {
  req.link = _(req.link).extend(req.body)

  req.link.save(function (err, link) {
    if (err) {
      return res.send(err)
    }

    res.send(link)
  })
}

exports.patch = exports.update

exports.destroy = function (req, res) {
  req.link.remove(function (err) {
    if (err) {
      return res.send(err)
    }

    res.send()
  })
}

最后,我使用express-resource模块将这些控制器映射到Express应用顶部的必要CRUD路由。

app.resource('api/links', require('../resources/links'))
trans by 2020-07-13T12:52:45Z

安全-Node.js https pem错误:例程:PEM_read_bio:没有启动林

我现在用node.js弄乱了登录表单,我尝试使用创建pem密钥和csr

openssl req -newkey rsa:2048 -new -nodes -keyout key.pem -out csr.pem

但是我在运行节点server.js时遇到错误

这是我的server.js

var http = require('http'),
    express = require('express'),
UserServer = require('./lib/user-server');

var https = require('https');
var fs = require('fs');

var options = {
  key: fs.readFileSync('./key.pem', 'utf8'),
  cert: fs.readFileSync('./csr.pem', 'utf8')
};

var app = express();

app.configure(function(){
  app.use(express.bodyParser());
  app.use(app.router);
  app.use(express.static(__dirname + '/public'));
});

var httpserver = http.createServer(app).listen('3004', '127.0.0.1');
var https_server = https.createServer(options, app).listen('3005', '127.0.0.1');
UserServer.listen(https_server);

这是错误

crypto.js:104
  if (options.cert) c.context.setCert(options.cert);
                          ^
Error: error:0906D06C:PEM routines:PEM_read_bio:no start line
    at Object.exports.createCredentials (crypto.js:104:31)
    at Server (tls.js:1107:28)
    at new Server (https.js:35:14)
    at Object.exports.createServer (https.js:54:10)

我尝试跑步

openssl x509 -text -inform DER -in key.pem

它给

unable to load certificate
140735208206812:error:0D0680A8:asn1 encoding routines:ASN1_CHECK_TLEN:wrong tag:tasn_dec.c:1319:
140735208206812:error:0D07803A:asn1 encoding routines:ASN1_ITEM_EX_D2I:nested asn1 error:tasn_dec.c:381:Type=X509

由于我的加密文件已经是.pem文件,因此我不确定该错误是什么意思,因此不胜感激。

谢谢

trans by 2020-07-13T09:44:50Z

版本-为什么“建议大多数用户”使用高于v6.2.0的node.js v4.4.5?

几年前,我在开发项目中使用了node.js,该应用暂时处于“滞销状态”-它需要保持在线状态,需要保持安全性,但不需要太多注意。 它当前在node.js v0.10.32上运行,但是我现在想投资到“长期”迁移到长期支持(LTS)版本,以便在可预见的将来更容易维护。

乍一看,node.js主页使其看起来像v4.4.5显然是唯一可用的LTS版本:

enter image description here

但是,如果我单击该LTS时间表链接,它将讲述一个不同的故事。 据我所知,node.js的第6版也将定为LTS发行版,其支持将比第4版晚整整一年。

鉴于:

  • v6.2.0是版本发布
  • v6据说将接受LTS维护,直到2019-04-01
  • 理论上,v6.x中的任何更改都不应破坏向后兼容性

为什么要麻烦升级到v4而不是v6? 好像v4可以为我少买一年的安全补丁,但是没有其他兼容性保证吗?

trans by 2020-07-13T03:54:00Z

node.js-如何在nodejs中的单个文件中提供mysql数据库连接

我需要为模块提供mysql连接。 我有这样的代码。

var express = require('express'),
app = express(),
server = require('http').createServer(app);

var mysql      = require('mysql');
var connection = mysql.createConnection({
    host     : '127.0.0.1',
    user     : 'root',
    password : '',
    database    : 'chat'
});

connection.connect(function(err) {
    if (err) {
        console.error('error connecting: ' + err.stack);
        return;
    }
});

app.get('/save', function(req,res){
    var post  = {from:'me', to:'you', msg:'hi'};
    var query = connection.query('INSERT INTO messages SET ?', post, function(err, result) {
        if (err) throw err;
    });
});

server.listen(3000);

但是我们如何为所有模块提供一次mysql连接。

trans by 2020-07-13T03:04:47Z

javascript-Intellij Idea警告-使用aysnc / awai的“返回的承诺被忽略”

我在Node.js v7.3的代码中使用Express.js。 在此,我创建了.then(),将请求转发给我的login()

我在.then()内部使用async / await进行异步调用。 问题是IntelliJ给我警告说

从login()返回的承诺将被忽略。

问题是我什至没有从.then()方法返回任何东西。

这是代码-

UserRouter.js

router.post('/login', function (req, res, next) {
    userController.login(req, res); // I get the warning here
});

UserController.js

exports.login = async function (req, res) {
    try {
        const verifiedUser = await someFunction(req.body.access_code);
        let user = await User.findOrCreateUser(verifiedUser);
        res.status(200).send(user);
    }
    catch (err) {
        res.status(400).send({success: false, error: err});
    }
};

如果我仅使用本机Promise编写相同的登录方法,则不会收到此警告。 我在这里理解错了吗?还是IntelliJ错了?

编辑-

感谢@Stephen,我知道异步函数会返回一个promise,但是如果Intellij识别出异步函数未返回任何内容并且不显示该警告会更好,因为当我在.then()函数之后链接一个.then()时 ,则它将undefined对象提供给当时的结果。 这意味着如果我们不从异步函数中显式返回某些内容,则返回undefined吗?

trans by 2020-07-13T00:15:13Z

node.js-为什么npm在安装东西时会闪烁“动词”和“窗台”?

我想了解通过npm安装节点模块时,“动词”和“窗台”这两个词的含义:

⋊> ~/t/quill on develop ◦ npm install                                                                                                                                  15:35:02
⸨      ░░░░░░░░░░░░⸩ ⠙ fetchMetadata: sill mapToRegistry uri https://registry.npmjs.org/big.js

mapToRegistry之前的sill也更改为verb,然后再次返回。 这些是什么意思?

trans by 2020-07-12T23:13:31Z

上一页 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 下一页 共174页