小编Kau*_*are的帖子

互斥锁(JS)在浏览器的多个选项卡之间共享?

浏览器中的两个选项卡是否有任何方法可以共享Mutex(在JavaScript中)?

我正在使用node.js和socket.io开发一个web应用程序,我希望各个选项卡与服务器共享一个连接.所谓的"领导者"选项卡是唯一一个维护连接的选项卡,而对其余部分的消息都通过这个传递.现在,我正在使用领导者选举算法来选择领导者,但考虑到如果当前的领导者下降需要一两秒来重新选举新领导者,我想知道是否有更好的方法来做相同.

javascript browser mutex

10
推荐指数
2
解决办法
1723
查看次数

如何手动将管道刷新到 node.js 中的子进程?

我正在尝试在 node.js 上运行脚本,该脚本按顺序将数字发送到一个可执行文件a.out,然后将其平方并将结果写入其标准输出。发生这种情况时,将发送下一个号码。这是代码:

var spawn = require('child_process').spawn;
var p = spawn("./a.out",[],{"stdio":"pipe"});
p.stdout.setEncoding("utf8");
p.stdout.on("data",function(data){
    var x = parseInt(data.trim()), y = Math.sqrt(x);
    console.log("received",x);
    if(++y===10) p.kill();
    else {
        console.log("sending",y);
        p.stdin.write(y+"\n");
    }
});
var start = 2;
console.log("sending",start);
p.stdin.write(start+"\n");
setTimeout(function(){ p.stdin.end(); },1000);
Run Code Online (Sandbox Code Playgroud)

a.out以下 C 程序的编译版本在哪里:

#include<stdio.h>
int main(){
    int x;
    while(scanf("%d",&x)!=EOF)
        printf("%d\n",x*x);
    return 0;
}
Run Code Online (Sandbox Code Playgroud)

但是,我得到以下输出:

sending 2
received 4
sending 3

events.js:72
    throw er; // Unhandled 'error' event
          ^
Error: write after end
Run Code Online (Sandbox Code Playgroud)

更改毫秒值setTimeout只会延迟错误。显然,我试图发送到的数据a.out被缓冲并在我终止管道时发送。我如何手动冲洗它?

pipe flush child-process node.js

5
推荐指数
1
解决办法
2155
查看次数

标签 统计

browser ×1

child-process ×1

flush ×1

javascript ×1

mutex ×1

node.js ×1

pipe ×1