Tag: 集群计算

客户端不握手客户端应重新连接,在集群中的socket.io

我的node.js应用程序与express,redis,mongo和socket.io工作正常。 今天当我介绍群集,我发现它的工作原理,但应用程序有很多消息, 'client not handshaken' 'client should reconnect' 来自socket.io的响应时间很多次,非常糟糕,几秒钟。 然后,我使用http-proxy前端结束来自浏览器的请求。 Chrome浏览器间歇性地工作,不会抛出这样的消息。 有时候,如果我再次打开相同的URL,它会开始抛出这些消息,响应被延迟。 Firefox的行为也是一样的。 随机地,它开始抛出这些消息不断..看起来像websocket在集群环境中的一些问题。 我的node.js版本是0.6.10,socket.io 0.9.0,express 2.5.9,http-proxy 0.8.0

重新启动node.js群集工作者

我有一个节点应用程序,我使用群集在多个核心上运行。 我遇到了一个问题,当我的应用程序抛出一个exception,工人死亡,不重新启动。 这是有道理的,但我想知道是否有更好的方法来处理重新启动这些工人,而不是必须监视它,或尝试/捕捉或听每一个错误。 我以前永远都用过,而且看起来像这样的东西对于集群来说是很好的。 有没有办法重新启动它们,或者在顶层添加“pokemon”exception处理,以确保我的工作人员不会在意外exception情况下死亡?

NodeJS process.send停止工作

我正在尝试一下NodeJS。 我遇到以下代码的问题。 过了一段时间,从工作人员发送到群集中的主服务器的消息看上去不再被处理。 这是NodeJS网站上的一个集群示例的变体。 var cluster = require('cluster'); var numCPUs = require('os').cpus().length; if (cluster.isMaster) { console.log("Starting cluster …"); for (var i = 0; i < numCPUs; i++) { var worker = cluster.fork(); worker.on('death', function(worker) { console.log('worker ' + worker.pid + ' died. restart…'); cluster.fork(); }); worker.on('message', function(msg) { if (msg.cmd == 'reached') { console.log('Worker %d […]

Node.js多服务器集群:如何在多个节点集群中共享对象

我想创build一个node.js服务器的集群,以同时支持多个并发,为一个聊天室应用程序。 服务器保存需要在所有节点之间共享的信息,我试图找出保持所有服务器同步的最佳方法。 我希望共享对象具有尽可能大的灵活性,因为我打算在将来添加更多function。 到目前为止,我有两个解决scheme: 订阅NoSQL密钥(例如, redis发布 – 订阅 ) 节点使用套接字互相更新。 哪个更好? 我错过了什么?

重交通生产环境下的节点JS聚类

我有一个Web服务处理http请求redirect到特定的URL。 正确的CPU是每天约500万点击,但我需要扩大到处理2000万以上。 这是一个生产环境,所以我对新的节点群集方法b / c有点担心,它仍然被列为实验性的。 我需要关于如何在节点上处理Linux服务器上的stream量的build议。 有什么想法吗?

1000连接上100%的CPU使用率 – Node.js,socket.io,集群和Redis …

我的聊天工作在24个线程(2个6核心X5650 @ 2.67GHz)…如果有大约1000个连接CPU使用率(每个线程)增长到80-100%….我认为有什么是我的错代码…节点不应该只有1000个连接产生这样的负载。 你可以给我一些关于在哪里看的想法 我的代码: express = require('express') http = require('http'); cluster = require("cluster"); numCPUs = require("os").cpus().length, port = 55678; userCount = 0; interv = false; RedisStore = require("socket.io/lib/stores/redis"), redis = require("socket.io/node_modules/redis"), pub = redis.createClient(), sub = redis.createClient(), client = redis.createClient(), counter = redis.createClient(); counter.set('count',0); client.set('searching',0); client.del('freeusers'); if (cluster.isMaster) { for (var i = 0; […]

Faye集群多个节点NodeJS

我正在尝试使用faye(nodejs)来制作pub / sub infra。 我想知道水平缩放是否可能。 一个nodejs进程将运行在单核上,所以当人们谈论集群时,他们会谈到在同一台机器上创build多个进程,共享一个端口,并通过redis共享数据。 喜欢这个: http://www.davidado.com/2013/12/18/using-node-js-cluster-with-socket-io-for-push-notifications/ 首先,我不明白我们如何确保每个分支进程都转到不同的核心。 如果我在具有4个内核的计算机上分配10个节点服务器,是否平均分配? 如果我想添加一个新的机器,从而缩放它。 我从来没有见过这样的支持。 我不确定是否有可能做到这一点。 假设有多个节点正在使用,并有一些负载平衡器。 但是一个客户端只能连接到一个服务器进程。 因此,当客户端C1在客户端C2订阅的频道上发布,并且C1连接到过程P1,并且C2连接到过程P2时,P1在没有连接时如何将消息发布到C2? 这在单台机器的情况下可能是可能的,因为cluster模块使所有进程共享相同的端口和连接。 我对networking世界以及nodejs和faye都相当陌生。 如果问题出现问题,请指教。

Node.js主 – 工通信。 师父发射一个事件,但只有一个工人听。 需要所有工作人员倾听

在下面的代码中,我有一个worker向master发送消息(通过process.send从一个不同的文件)告诉master通知所有的worker来执行一个函数,但是只有发送消息的worker才会执行这个函数。 我怎么能让所有的工人执行这个function? var listener = function() { doSomeThing; }; if (cluster.isMaster) { numCpu = require('os').cpus().length; for (var i = 0; i < numCpu; i += 1) { var worker = cluster.fork(); worker.on('message', function(msg)) { if(msg.fromWorker) { console.log('Worker(' + worker.id + ') to Master: ' + msg.fromWorker); worker.send({fromMaster: 'New instructions, immediately perform function.'}); eventEmitter.on('someThing', listener); } […]

使用Node.js集群工作人员执行特定任务

使用节点I中的集群模块可以允许在多个核心上运行http服务器,从而提高并发性,这非常棒。 但是,如果我的应用程序包含其他任务,我不想多次运行,如计划的事件。 我怎样才能做到这一点? 我使用集群模块的基本代码是这样的… var cluster = require('cluster'); if(cluster.isMaster){ var numWorkers = require('os').cpus().length; for(var i = 0; i < numWorkers; i++) { cluster.fork(); } //restart dead workers cluster.on('exit', function(worker, code, signal) { console.log('Worker ' + worker.process.pid + ' died with code: ' + code + ', and signal: ' + signal); console.log('Starting a new worker'); […]

Nodejs集群模式如何处理HTTP保持连接?

如果HTTP连接保持活动状态,那么同一个工作人员是否会处理所有请求? 我希望有一个HTTP服务器处理所有networkingstream量,但是将每个请求的数据处理转交给随机的工作进程,即使这些请求是通过相同的HTTP(TCP)连接进入的: if (cluster.isMaster) { http.createServer(function(req, res) { worker.send(req, function(res) { // worker will generate response into callback parameter res.end(); }); }).listen(80); } else { process.on('message', function(msg) { // generate an http reponse but DO NOT SEND IT OUT A SOCKET, // return it to Master var res = generate_http_response_object(); process.send(res); }); } 这会工作吗?