Tag: zeromq

distibuted信号量系统序列化不能在同一时间运行的任务

我正在寻找一种方法来序列化影响数据存储中的数据的任务,而不使用MySQL ex:在group1上执行记帐的工作人员应该是唯一一个在第一组上进行记帐的工作人员,并且如果另一个工作人员正在对第一组进行记帐, 。 我可以通过设置信号表来实现这一点,启动一个事务,在group1的行上进行更新,完成我的任务,然后提交。 我在想,也许0mq redis或某种消息传递系统可以用来实现相同的目标,并允许我使用我想要的任何数据存储。 我也在想,ScalienDB可能能够解决与mysql相同的庄园问题,因为它支持交易。 ScalienDB的文档似乎有些不完整,所以我不能确定它是否可以以这种方式进行交易。 所以我的问题是: 1. ScalienDB可以执行一个事务来强制客户端等待另一个客户端提交,如果它想要编辑另一个客户端也做了编辑的表中的一行。 2.使用消息传递系统,你会如何build议实现一些归结为这样的东西: var semaphore = semaphore_group() semaphore.acquire('task1',function(){ // do work after a sophomore is locked in semaphore.release() // }) 理想情况下,我不希望这个系统依赖于一个集中的经纪人 3.有没有一个可以解决这个问题的替代解决scheme

pyzmq无阻塞套接字

有人可以指点我一个REQ / REP的非阻塞ZeroMQ(0MQ)与Python绑定的例子吗? 也许我对ZMQ的理解是错误的,但我在网上找不到一个例子。 Node.JS中有一台服务器,它将多个客户端的工作发送到服务器。 这个想法是,服务器可以启动一堆并行操作的作业,而不是为一个客户端处理数据,然后再处理下一个

zeromq epgm pub / sub不工作

我正在使用node.js示例。 我已经在我的ubuntu 12.10机器上安装了openpgm和zeromq 3.2。 代码如下: var zmq = require('zmq') , port = 'epgm://eth0;239.192.1.1:5555'; var socket = zmq.socket('pub'); socket.identity = 'publisher' + process.pid; var stocks = ['AAPL', 'GOOG', 'YHOO', 'MSFT', 'INTC']; socket.bind(port, function(err) { if (err) throw err; console.log('bound!'); setInterval(function() { var symbol = stocks[Math.floor(Math.random()*stocks.length)] , value = Math.random()*1000; console.log(socket.identity + ': sent ' + symbol […]

zeromq w / Electron:找不到绑定文件

我使用的是Windows 7 x64,nodejs 5.1.0和Electron 0.35。 我按照电子快速启动应用程序的指示,然后将行require("zmq")到main.js. 此时,在npm install zmq –save electron main.js之后, electron main.js显示: Error: Could not locate the bindings file. Tried: Error: Could not locate the bindings file. Tried: [ zmq.nodepath列表] 尝试的path之一实际上存在于系统中,即node_modules/zmq/build/Release/zmq.node 如果我删除了Electron应用程序代码,并在main.js中保留require("zmq")行,则可以使用node main.js成功运行。 在用Electron运行时,我该如何摆脱这个错误?

如何为node.js安装zeromq

我想在Windows 7 64位安装node.js的zeromq。 我试着用 npm install zmq 它给phython.exe丢失。 安装该python (2.7.3) 。 再次,它给了一些构build错误,如下所示: C:\Windows\Microsoft.NET\Framework\v4.0.30319\msbuild.exe failed with exit code: 1

在npm安装期间,在mac 10.5.8上findnode-gyp'pkg-config:command not found'

试图在github项目的mac-osx上进行npm安装。 不要在packages.json中看到pkg-config为什么node-gyp期望这样? 好像node-gyp应该包含pkg-config。 我认为这是节点工作的方式。 安装一个软件包,它可以根据需要进行安装。 我想这是不同的。 也想知道哪个版本的pkg-config其寻找。 是的,我一直在那里下载压缩包,但它的mac安装说明真的是无稽之谈。 它保持./configure然后进行安装。 但是,makefile不可用,一切都在同一目录级别,但它说cd到代码目录等 > node-gyp重build / bin / sh:找不到pkg-config:命令 gyp:调用'pkg-config libzmq –libs'返回退出状态127.试图加载binding.gyp gyp ERR! configuration错误 gyp ERR! 堆栈错误:`gyp`失败,退出代码:1 gyp ERR! 在ChildProcess.onCpExit(/usr/local/lib/node_modules/npm/node_modules/node-gyp/lib/configure.js:343:16) gyp ERR! 在ChildProcess.emit(events.js:98:17) gyp ERR! 在Process.ChildProcess._handle.onexit(child_process.js:820:12) gyp ERR! 系统达尔文12.5.0 gyp ERR! 命令“node”“/usr/local/lib/node_modules/npm/node_modules/node-gyp/bin/node-gyp.js”“rebuild” gyp ERR! cwd / Users / Mac1 / Downloads / projdirectory / node_modules / zmq […]

带有node.jspipe道接收器的ZeroMQ会在一段时间后停止接收消息

我一直在试图build立一个呼吸机/工作者/汇的模式,以抓取页面,但我从来没有超过testing阶段。 我的设置的一个特殊性在于,水槽与呼吸机的生命过程相同。 所有节点使用ipc:// transport。 目前只有testing消息被交换。 呼吸机发送任务,工作人员收到它们,然后等待发送确认信息。 症状 :一段时间后(通常less于5分钟),即使呼吸机继续发送任务,工作人员仍然接收并发送确认信息,接收机将停止接收确认信息。 我知道发送的确认信息,因为如果我重新启动我的接收器,启动时会得到所有丢失的消息。 我认为ZeroMQ处理自动重新连接。 通风机/宿 var push = zmq.socket('push'); var sink = zmq.socket('pull'); var pi = 0; setInterval(function() { push.send(['ping', pi++], zmq.ZMQ_SNDMORE); push.send('end'); }, 2000); push.bind('ipc://crawl.ipc'); sink.bind('ipc://crawl-sink.ipc'); sink.on('message', function() { var args = [].slice.apply(arguments).map(function(e) {return e.toString()}); console.log('got message', args.join(' ')); }); worker.js var pull = zmq.socket('pull'); var sink = […]

ZeroMQ与Socket.io

我想要zeroMQ和socket.io之间的主要区别 性能(速度更快吗?) 应用。 (用于实时服务吗?) 浏览器支持。 (支持哪些浏览器?)

node.js集群中的subprocess间通信选项

所以我现在在做一个node.js游戏服务器应用程序,在这里我碰到了一些问题。 我的问题是,我使用socket.io接受来自游戏客户端的入站连接。 这些客户端可能连接到游戏世界的几个区域或区域之一。 基本架构如下所示。 主进程为运行区域pipe理器进程的每个游戏区域分配一个subprocess; 一个专门维护区域数据的过程(三维模型,玩家/实体的位置等)。 主进程然后为其创build的每个区域pipe理器分派多个“通信线程”。 这些线程创build一个socket.io的实例并侦听该区域的端口(多个线程在单个端口上侦听)。 这些线程将在自己的进程中处理大部分游戏逻辑,并与支持游戏服务器的数据库进行通信。 唯一的问题是,在某些情况下,他们可能需要与区域经理沟通,以获得关于区域,球员等的信息。 举个例子:一个玩家想要在该区域内购买/出售/交易非玩家angular色(NPC)。 区域通信线程需要询问区域pipe理器线程,以确定玩家是否足够接近NPC进行交易,然后才允许交易发生。 我在这里遇到的问题是我打算利用node.js集群function,并使用进程的send()和on()方法来回传递消息。 除了我遇到的一个警告之外,这将是很好的。 由于cluster.fork()所有subprocess都只能与“主”进程通信。 node.js根进程成为所有通信的瓶颈。 我使用一个脚本在我的系统上运行了一些基准testing,它使用集群的进程间通信(IPC)来回传递消息,并跟踪每秒钟执行多less次中继。 看起来,最终节点以每秒约20k的速度在它可以中继的IPC数量方面达到最大值。 这个数字在Phenom II 1.8ghz四核笔记本电脑和FX-8350 4.0ghz 8核心桌面电脑上都是一致的。 现在这听起来相当高,除了这基本上意味着无论有多less区域或通信线程,所有的IPC仍然是通过一个单一的进程瓶颈,作为整个应用程序的“中继”。 这意味着尽pipe看起来每个单独的线程可以每秒钟接续20k个IPC,但是由于所有的通信都是通过一个线程进行的,整个应用程序作为一个整体将永远不会中继,即使是在一些疯狂的32核心系统上。 所以这就是我遇到的问题。 现在困境。 我已经阅读了很多有关其他各种选项,并阅读了20个不同的问题在这里堆栈关于这个话题,我已经看到了一些事情经常popup: Redis :我实际上是在我的服务器上运行Redis,并将其用作socket.io数据存储,以便多个线程中的socket.io可以共享连接数据,以便用户可以连接到N个socket.io线程为他们的区域,所以服务器可以自动负载平衡input连接。 我关心的是它贯穿networking堆栈。 对于同一台服务器上的多个进程之间的通信几乎不是理想的 我觉得延迟将是一个长期的主要问题。 0MQ(zeromq / zmq) :我以前从来没有用过这个,但最近我已经听到了一些。 根据我所做的阅读,我发现了很多人使用TCP套接字的例子,但是对于使用IPC的人来说并没有太多的嗡嗡声。 我希望也许有人在这里为IPC工作过0MQ(甚至可能在node.js中),并且可以为我提供一些启示。 dnode :我再也没有用过这个,但是从我所看到的看来,这是另外一个devise用于TCP的选项,这意味着networking堆栈再次成为可能。 node-udpcomm :有人在这里的另一个问题(这是我不能再次不幸find)连接这个。 我从来没有听说过,它看起来像一个非常小的解决scheme,打开和侦听UDP连接。 虽然这可能仍然会比TCP选项更快,但我们仍然有networking堆栈的方式吗? 我肯定喜欢在我的“程序员区”以外的一英里,就像这里,以及我不太了解的networking/计算机体系结构的东西。 无论如何,底线是我完全卡在这里,不知道在这种情况下IPC是最好的select。 我现在假设0MQ是我上面列出的最好的select,因为它是唯一一个似乎为通信协议提供了“IPC”选项,我认为这意味着它使用UNIX套接字或者是不通过networking堆栈,但我不能确认,或任何东西。 我想我只是希望这里的一些人能够足够的了解我的方向,或者告诉我我已经去了那里。 我正在开发的这个项目是一个多人游戏服务器,devise用来与多人游戏客户端“开箱即用”,并以Three.js为3Dgraphics/计算器提供动力。 客户端和服务器将在所有人都满意的情况下成为开放源代码,并且我希望确保架构尽可能地具有可扩展性,这样人们就不会在此基础上构build游戏,然后进行扩展并最终撞墙。 无论如何感谢您的时间,如果你真的读这一切:)

Node.js socket.send()函数在退出前无法完成

在我编写的一些Node.js脚本中,我注意到即使最后一行是同步调用,有时在Node.js退出之前也不会完成。 我从来没有见过一个console.log语句在退出之前无法运行/完成,但是我已经看到一些其他语句在退出之前无法完成,我相信它们都是同步的。 我可以看到为什么在这种情况下,asynchronous函数的callback将无法启动。 有问题的代码是一个ZeroMQ .send()调用如下所示: var zmq = require('zmq'); var pub = zmq.socket('pub'); pub.bindSync('tcp://127.0.0.1:5555'); setInterval(function(){ pub.send('polyglot'); },500); 上面的代码按预期工作…但是,如果我删除setInterval() ,只是这样调用它: var zmq = require('zmq'); var pub = zmq.socket('pub'); pub.bindSync('tcp://127.0.0.1:5555'); pub.send('polyglot'); //this message does not get delivered before exit process.exit(0); 那么这个消息就不会被传递 – 程序在pub.send()调用完成之前显然会退出。 在退出Node.js之前,确保语句完成的最佳方法是什么? closures钩子可以在这里工作,但是恐怕只是掩盖了问题,因为你不能把你需要的所有东西都保证在closures钩子中运行。 这个问题也可以用这种方式来certificate: if (typeof messageHandler[nameOfHandlerFunction] == 'function') { reply.send('Success'); messageHandler[nameOfHandlerFunction](null, args); } else […]