标签归档:nodejs

nodejs中websocket传输大量数据

用nodejs当websocket server时,当客户端传输的数据量比较大时,数据会分片到达服务器,这时socket的data处理函数接收到的只是整个数据中的一部分,因此我们要将分片的数据拼合起来再做处理。当最后的数据到达时,数据的末尾是\ufffd,所以可以靠判断数据中是否包含\ufffd来指示整个数据是否已经全部接收。

var message = '';

socket.on('data', function(chunk) {   
    message += chunk;
    var index = message.indexOf('\ufffd');
    if(index !== -1) {
        console.log(message.slice(0, index)); 
        // console.log(message.slice(1, index)); 
        // Do your logic here
        message = message.slice(index + 1);
    }
});

Nodejs和MongoDB初体验

学习了一下Nodejs和MongoDB,写了个示例程序,读取数据库中产品的列表。

var http = require("http"),
	mongo = require("mongodb"),
	events = require("events");

http.createServer(function(req, res) {

	var products_emitter = new events.EventEmitter(),
	    // 创建到northwind数据库的链接。相当于use northwind
	    db = new mongo.Db("northwind", new mongo.Server('localhost', 27017, {}), {});
	
	var listener = function(products) {
	    var html = [], len = products.length;
	    html.push('<!DOCTYPE html>');
	    html.push('<html>');
	    html.push('<head>');
	    html.push('<title>Nodejs</title>');
	    html.push('</head>');
	    html.push('<body>');	 
	    if(len > 0) {
	    	html.push('<ul>');					
	    	for(var i = 0; i < len; i++) {
    			html.push('<li>' + products[i].name + '</li>');
	    	}
	    	html.push('</ul>');
	    }
	    html.push('</body>');
	    html.push('</html>');
	    
	    res.writeHead(200, "Content-Type: text/html");
	    res.write(html.join(''));
	    res.end();
	    
	    clearTimeout(timeout);
	}
	products_emitter.on('products', listener);
	
	var timeout = setTimeout(function() {
	    products_emitter.emit('products', []);
	    products_emitter.removeListener('products', listener);
	}, 10000);
	        
	db.open(function() {
	    // 打开名为products的表
		db.collection("products", function(err, collection) {
		    // select * from products 相当于db.products.find()
			collection.find(function(err, cursor) {
				cursor.toArray(function(err, items) {
					products_emitter.emit('products', items);
				});
			});
		});
	});
	
}).listen(8000);

console.log("Started");