小编Joã*_*imo的帖子

使一个node.js服务器与另一个服务器"交谈"的最佳方法是什么?

  • MsgPack?
  • JSON-RPC?
  • Socket.io(可能吗?怎么样?)

编辑:我说的是每个在不同物理机器上的2个节点进程;

我不明白redis如何帮助我...

json-rpc node.js socket.io

7
推荐指数
1
解决办法
6784
查看次数

如何保护Redis群集?

我知道Redis Cluster仍然不稳定,但是很久以来它已经通过了所有的单元测试,所以我开始使用它.

我想知道如果节点需要身份验证,Redis群集是否能正常工作.我倾向于认为是,因为它们通过不同的端口连接并使用不同的协议,但我不确定,也无法在规范中找到任何文档或任何内容来确认这一点.

此外,如果redis群集协议飞过身份验证障碍,那么它不是安全漏洞吗?我的数据库可以被外界访问吗?(该端口至少必须是可访问的,以便它可以与其他节点通信)

database security database-design sharding redis

7
推荐指数
2
解决办法
4812
查看次数

NodeJS:处理TCP套接字流的正确方法是什么?我应该使用哪个分隔符?

从我的理解在这里,"V8拥有世代垃圾收集器.移动对象随机风靡,节点不能得到一个指向原始字符串数据写入到插座." 所以我不应该将来自TCP流的数据存储在字符串中,特别是如果该字符串变得大于Math.pow(2,16)字节.(希望我到现在为止..)

那么处理来自TCP套接字的所有数据的最佳方法是什么?到目前为止,我一直试图_:_:_用作分隔符,因为我觉得它有点独特,不会乱搞其他东西.

将会出现的数据样本 something_:_:_maybe a large text_:_:_ maybe tons of lines_:_:_more and more data

这就是我试图做的事情:

net = require('net');
var server = net.createServer(function (socket) {
    socket.on('connect',function() {
        console.log('someone connected');
        buf = new Buffer(Math.pow(2,16));  //new buffer with size 2^16
        socket.on('data',function(data) {
            if (data.toString().search('_:_:_') === -1) {    // If there's no separator in the data that just arrived...
                buf.write(data.toString());   // ... write it on the buffer. it's part of another message that will come.
            } else …
Run Code Online (Sandbox Code Playgroud)

sockets buffer tcp stream node.js

6
推荐指数
1
解决办法
2万
查看次数

在Twitter Bootstrap的ScrollSpy中,我在哪里可以放入data-spy ="scroll"?

它在文档中清楚地说明了

只需将data-spy ="scroll"添加到您想要监视的元素(最常见的是这将是正文)

但是,如果我把它放在身上,我似乎只能让它发挥作用.当我把它放在我希望监视的任何其他元素中时,导航的最后一个元素被选中.

是对身体,和它的作品,而是同样的事情,但用data-spy="scroll"的元素我想窥视,它失败(只有最后一个元素被激活).

我做错了什么或这是一个错误?

scroll twitter-bootstrap

6
推荐指数
1
解决办法
6130
查看次数

为什么html5 postMessage不能为我工作?

我使用几行javascript来创建一个iframe元素,然后我想给它发一条消息,如下所示:

function loadiframe (callback) {
    var body = document.getElementsByTagName('body')[0];
    var iframe = document.createElement('iframe');
    iframe.id = 'iframe';
    iframe.seamless = 'seamless';
    iframe.src = 'http://localhost:3000/iframe.html';
    body.appendChild(iframe);
    callback();
}

loadiframe(function() {
    cpframe = document.getElementById('iframe').contentWindow;
    cpframe.postMessage('please get this message','http://localhost:3000');
    console.log('posted');
})
Run Code Online (Sandbox Code Playgroud)

然后,在http:// localhost:3000/iframe.html(iframe的源代码)里面是这样的:

<!DOCTYPE html>
<html>
<head>
<title>does not work</title>
<script>
window.addEventListener("message", receiveMessage, false);
function receiveMessage(event) {
  if (event.origin == "http://localhost:3000") {
    document.write(JSON.stringify(event));
    document.write(typeof event);
  }
}
</script>
</head>
<body>
</body>
</html>
Run Code Online (Sandbox Code Playgroud)

但没有任何反应......我甚至试图不使用原产地的安全检查,但即使没有发生任何事情......就像从来没有得到消息......

我在某种异常问题吗?我试图确保在postMessage消失之前加载了iframe ...

EDIT1:此外,控制台上没有显示错误......

EDIT2:我在Google Chrome 11和Firefox 4中尝试过它

先感谢您.

html5 postmessage

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

令人烦恼和奇怪的正则表达式问题:'io \.' 得到一个关于'功能'这个词的匹配

从节点REPL的事情,

> 'function'.search('io\.')
5
Run Code Online (Sandbox Code Playgroud)

我真的需要它只匹配"io".而不是"功能"或中间只有"io"的东西......

更奇怪的事情:

> 'io'.search('io\.')
-1
> 'ion'.search('io\.')
0
Run Code Online (Sandbox Code Playgroud)

所以看来我没有逃脱点角色..?但我和"\"......对吗?我在http://www.regextester.com/http://regexpal.com/上进行了测试,它的工作方式与我认为应该有效的方式相同.

我究竟做错了什么 ?node.js中的正则表达式与我习惯的有些不同吗?

EDIT1:在Google Chrome的javascript控制台中,我也得到了

'function'.search('io\.')
5
Run Code Online (Sandbox Code Playgroud)

所以这可能是一个v8的事情......对吗?

EDIT2:我从Firefox的javascript控制台得到了相同的结果,所以它不是v8的东西......这里发生了什么?我真的很困惑......

javascript regex escaping node.js

4
推荐指数
2
解决办法
245
查看次数

用NodeJS编写的简单TCP服务器中的socket.emit?

[如你所见,我不明白一个TCP服务器和客户端的基本概念非常好,大概socket.emit甚至是不可能的,但我想知道的最佳替代品或类似的事情...]

Socket.io有一个发送事件并在另一侧捕获它们的美妙事物,它在它的第一页(http://socket.io).我可以使用NodeJS的常规'net'模块做类似的事吗?如果不是那么相同的是什么?

我试过了:

server.js

var server = net.createServer(function(socket) {
    socket.on("connect",function() {
        socket.emit('test',{msg : 'did you get it ?'});
    });
}).listen(8000);
Run Code Online (Sandbox Code Playgroud)

client.js

var client = net.createConnection(8000, localhost);
client.on('connect',function(){
    client.on('test',function(data) {
        console.log(data.toString());
    });
});
Run Code Online (Sandbox Code Playgroud)

但是你可以想象,它不起作用.我怎样才能做到这一点?

提前致谢.

tcp tcpclient node.js socket.io

4
推荐指数
1
解决办法
6928
查看次数

Firefox中是否不支持WebSockets

我在Ubuntu 11.04中运行Firefox 7,我注意到socket.io正在从网络套接字回退到xhr-polling,所以我输入WebSocket了Firefox的控制台,得到了

[00:48:21.224] ReferenceError: WebSocket is not defined
Run Code Online (Sandbox Code Playgroud)

在Google Chrome 14上我得到了

WebSocket
function WebSocket() { [native code] }
Run Code Online (Sandbox Code Playgroud)

根据这个,WebSockets的部分是由于火狐4支持和Firefox的自6全面支持.

它只是在linux上的firefox中有所不同吗?

firefox google-chrome websocket

4
推荐指数
1
解决办法
8896
查看次数

如何在不同的Goroutines中的ZeroMQ上下文之间进行通信?

我使用它作为样板,除了在同一个程序中我还有一些goroutine是工作者并连接到后端端点,tcp://127.0.0.1:5560.

我想要做的是让它通过更有效的方式连接,例如ipc://,inproc://,甚至是unix套接字.我试过那些,但它没有用.ZeroMQ的频道不合适吗?

那么如何在没有tcp的情况下将不同的goroutine与ZeroMQ上下文连接起来呢?还有更好的选择吗?

更新:代码:

// Simple message queuing broker
// Same as request-reply broker but using QUEUE device
//
// Author:  Brendan Mc.
// Requires: http://github.com/alecthomas/gozmq

package main

import (
    zmq "github.com/alecthomas/gozmq"
)

func startWorker() {
    context, _ := zmq.NewContext()
    defer context.Close()

    worker, _ := context.NewSocket(zmq.REP)
    //err := worker.Connect("ipc:///backend")  // Tried it, but nothing
    //err := worker.Connect("inproc:///backend")  // Tried it, but nothing
    err := worker.Connect("tcp://127.0.0.1:5560") // this works
    if err != nil {
        fmt.Println(err)
    }

    for { …
Run Code Online (Sandbox Code Playgroud)

tcp ipc go zeromq inproc

4
推荐指数
1
解决办法
2120
查看次数

处理Go中的连接重置错误

在一个简单的Go HTTP处理程序上,如果我在仍然写入响应时断开客户端,http.ResponseWritter.Write将返回一个错误消息,如write tcp 127.0.0.1:60702: connection reset by peer.

现在,从syscall包中,我有sysca.ECONNRESET,它有消息connection reset by peer,所以它们不完全一样.

我怎么能匹配它们,所以我知道如果发生这种情况不要恐慌?在我一直在做的其他场合

if err == syscall.EAGAIN {
  /* handle error differently */
}
Run Code Online (Sandbox Code Playgroud)

例如,这工作正常,但我不能这样做syscall.ECONNRESET.

更新:

因为我迫切需要一个解决方案,暂时我会做这个非常肮脏的黑客攻击:

if strings.Contains(err.Error(), syscall.ECONNRESET.Error()) {
    println("it's a connection reset by peer!")
    return
}
Run Code Online (Sandbox Code Playgroud)

error-handling runtime-error go

4
推荐指数
3
解决办法
4001
查看次数