小编sic*_*icr的帖子

在Golang中重用http连接

我目前正在努力寻找在Golang中发布HTTP帖子时重用连接的方法.

我创建了一个像这样的传输和客户端:

// Create a new transport and HTTP client
tr := &http.Transport{}
client := &http.Client{Transport: tr}
Run Code Online (Sandbox Code Playgroud)

然后我将这个客户端指针传递给一个goroutine,它会向同一个端点发送多个帖子,如下所示:

r, err := client.Post(url, "application/json", post)
Run Code Online (Sandbox Code Playgroud)

查看netstat,这似乎导致每个帖子的新连接导致大量并发连接被打开.

在这种情况下重用连接的正确方法是什么?

go

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

将成员添加到MongoDb上的副本集

我正在尝试使用MongoDb创建副本集,服务器主机名是:

hostname hostname-1 hostname-2

其中每个都有/ etc/hosts文件中详细说明的所有相关主机名(它们都是运行Ubuntu 10.04 64位)

当我在一个节点上执行rs.initiate时,一切似乎都开始好了.运行rs.status(); 说明:

{
    "set" : "vega",
    "date" : ISODate("2012-01-22T19:15:55Z"),
    "myState" : 1,
    "members" : [
        {
            "_id" : 0,
            "name" : "hostname:27017",
            "health" : 1,
            "state" : 1,
            "stateStr" : "PRIMARY",
            "optime" : {
                "t" : 1327254848000,
                "i" : 1
            },
            "optimeDate" : ISODate("2012-01-22T17:54:08Z"),
            "self" : true
        }
    ],
    "ok" : 1
}
Run Code Online (Sandbox Code Playgroud)

当我尝试将新成员添加到副本集时,问题就出现了.我使用命令rs.add(hostname-1); 我收到以下错误:

{
    "assertion" : "need most members up to reconfigure, not ok : vega-1:27017",
    "assertionCode" : 13144,
    "errmsg" …
Run Code Online (Sandbox Code Playgroud)

database master-slave mongodb

20
推荐指数
3
解决办法
2万
查看次数

在Go中解析json时保留int64值

我在Go中处理一个json POST,它包含一个包含64位整数的对象数组.当使用json.Unmarshal时,这些值似乎被转换为float64,这不是很有用.

body := []byte(`{"tags":[{"id":4418489049307132905},{"id":4418489049307132906}]}`)

var dat map[string]interface{}
if err := json.Unmarshal(body, &dat); err != nil {
    panic(err)
}

tags := dat["tags"].([]interface{})

for i, tag := range tags {

    fmt.Println("tag: ", i, " id: ", tag.(map[string]interface{})["id"].(int64))

}
Run Code Online (Sandbox Code Playgroud)

有没有办法在json.Unmarshal的输出中保留原始的int64?

去上面代码的游乐场

parsing json go

10
推荐指数
1
解决办法
9886
查看次数

从Node.js中的TCP套接字读取字符串时出现的问题

我已经实现了一个使用TCP套接字进行通信的客户端/服务器.我正在写入套接字的数据是字符串化的JSON.最初一切都按预期工作,但是,随着我提高写入速率,我最终遇到JSON解析错误,其中客户端的开头在旧的结尾处接收到新写入的开始.

这是服务器代码:

var data = {};
data.type = 'req';
data.id = 1;
data.size = 2;
var string = JSON.stringify(data);
client.write(string, callback());
Run Code Online (Sandbox Code Playgroud)

以下是我在客户端服务器上接收此代码的方式:

client.on('data', function(req) {
    var data = req.toString();
    try {
        json = JSON.parse(data);
    } catch (err) {
         console.log("JSON parse error:" + err);
    } 
});
Run Code Online (Sandbox Code Playgroud)

随着费率的增加,我收到的错误是:

SyntaxError: Unexpected token {
Run Code Online (Sandbox Code Playgroud)

这似乎是下一个请求被标记到当前请求结尾的开始.

我试过用过; 作为每个JSON请求结束时的分隔符,然后使用:

 var data = req.toString().substring(0,req.toString().indexOf(';'));
Run Code Online (Sandbox Code Playgroud)

然而,这种方法,而不是导致JSON解析错误似乎导致在客户端完全丢失一些请求,因为我增加了超过300每秒的写入速率.

是否有通过TCP套接字划分传入请求的最佳实践或更有效的方法?

谢谢!

sockets json node.js

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

使用Javascript在一个页面上的多个实例

我无法弄清楚如何处理我想在页面上运行的一些javascript函数的多个实例.它是我正在开发的自定义分析项目的一部分.

我有一个名为initData()的函数; 该函数使用setInterval调用另一个函数,该函数每1000毫秒向我的服务器发送一次ping.

问题是我希望能够在一个页面上拥有多个此函数的实例.我目前的问题是,只要调用第二个实例,它就会覆盖第一个实例中的所有变量.

什么是最好的解决方法?有没有办法使函数分离和/或私有实例,以便它们不会相互干扰?

javascript

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

Node.js中带有子进程的自定义事件

我目前正在使用子进程,以便以非阻塞方式运行某些计算功能。

我遇到了一个问题,即我需要能够将计算结果绑定回父进程中的正确回调。例如:

var cp = require('child_process');
var n = cp.fork(__dirname + '/child.js');

exports.evaluate = function(data, callback) {

    n.send({ data : data});

    n.once('message', function(result) {

        callback(result);

    }

}
Run Code Online (Sandbox Code Playgroud)

这个例子的问题是,如果一个计算在另一个计算之前返回,那么它将不会收到正确的结果。

有什么方法可以使用自定义事件名称来代替“消息”,以确保每次调用评估函数时,都会创建一个唯一的侦听器,该侦听器在调用后将被删除?

如何通过子进程发出自定义事件?

提前致谢!

node.js

3
推荐指数
1
解决办法
2002
查看次数

标签 统计

go ×2

json ×2

node.js ×2

database ×1

javascript ×1

master-slave ×1

mongodb ×1

parsing ×1

sockets ×1