以下是我正在尝试做的事情:我正在开发一个Node.js http服务器,该服务器将在一台计算机上保存数千个移动客户端的推送目的(与redis协作)的长连接.
测试环境:
1.80GHz*2 CPU/2GB RAM/Unbuntu12.04/Node.js 0.8.16
Run Code Online (Sandbox Code Playgroud)
第一次,我使用"express"模块,在使用交换之前我可以使用它来达到大约120k并发连接,这意味着RAM不够.然后,我切换到本机"http"模块,我得到了大约160k的并发.但我意识到在本机http模块中仍然有太多功能我不需要,所以我把它切换到本机"net"模块(这意味着我需要自己处理http协议,但没关系).现在,每台机器可以达到大约250k并发连接.
这是我的代码的主要结构:
var net = require('net');
var redis = require('redis');
var pendingClients = {};
var redisClient = redis.createClient(26379, 'localhost');
redisClient.on('message', function (channel, message) {
var client = pendingClients[channel];
if (client) {
client.res.write(message);
}
});
var server = net.createServer(function (socket) {
var buffer = '';
socket.setEncoding('utf-8');
socket.on('data', onData);
function onData(chunk) {
buffer += chunk;
// Parse request data.
// ...
if ('I have got all I need') {
socket.removeListener('data', onData);
var req = { …Run Code Online (Sandbox Code Playgroud) 根据昌昌的回答更新:
我怎样才能在shell(Ubuntu)中看到这些线程?我用ps -eLf | grep节点| grep -v grep只看到两个:
root 16148 7492 16148 0 2 20:43 pts/26 00:00:00 ./bin/node /home/aaron/workspace/test.js
root 16148 7492 16149 0 2 20:43 pts/26 00:00:00./bin/node /home/aaron/workspace/test.js
假设我有三个分片,使用复合键{ x: 1, y: 1 }作为集合,x有三个int值:1,2,3,y是随机的.
然后我插入相同数量的文件x = 1,x = 2和x = 3.我期待的是所有块的范围都x = 1去shard1,x = 2去shard2,x = 3去shard3,然后我可以有查询隔离.但输出是出乎意料的:
test.t6
shard key: { "x" : 1, "y" : 1 }
chunks:
shard0000 5
shard0002 5
shard0001 5
{ "x" : { "$minKey" : 1 }, "y" : { "$minKey" : 1 } } -->> { "x" : 1, "y" : 0 } on : shard0000 Timestamp(2, …Run Code Online (Sandbox Code Playgroud)