2012-06-11 14 views
5

Tôi muốn benchmark máy chủ socket.io của mình. Tôi muốn kiểm tra xem có bao nhiêu kết nối và thông điệp song song mà máy chủ có thể xử lý.Benchmarkt socket.io

Nhưng máy chủ socket.io của tôi bị lỗi sau một vài phút khi tôi bắt đầu điểm chuẩn với khoảng 200 ổ cắm web.

Tôi đã cố gắng sử dụng mô đun cụm của node.js để chia sẻ quy trình với các lõi. Khi tôi sử dụng mô-đun cụm, một số kết nối bị ngắt kết nối sau một thời gian.

Các máy chủ mà tôi sử dụng cho kỳ thi này là một máy chủ ảo trên mây amazon với thuộc tính này:

  • 7 GB bộ nhớ
  • 20 EC2 Tính toán đơn vị (8 lõi ảo với 2,5 đơn vị EC2 Tính mỗi)
  • 1690 GB dung lượng lưu trữ dụ
  • 64-bit nền tảng
  • I/O hiệu suất: High tên
  • API: c1.xlarge

Đây là mã của benchmark-client:

var fs = require('fs'); 
var io = require("socket.io-client"); 
var host = "http://localhost:3000"; 
var timeLog = fs.createWriteStream(__dirname+'/public/time.log',{flags:'a',mode:0666, encoding:'encoding'}); 
var count = 200; 
var sockets = []; 
var total = 0; 
var countTime = 0; 
var echo = exports; 
echo.start = function() { 
    fs.writeFile('public/time.log',"",function(err){ 
     if(err) throw err; 
    }); 

    for(var i=0;i<count;i++){ 
     var socket = io.connect(host,{"force new connection":true}); 
     sockets.push(socket); 
     //console.log(i); 
     socket.on("message",function(message){ 
      countTime++; 
      time = new Date().getTime()-message; 
      total+=time; 
      timeLog.write(time+"\n"); 
      socket.send(new Date().getTime()); 
     }); 
     socket.on("disconnect",function(){ 
      console.log("disconnect"); 
     }); 
    } 

    parallelSockets(); 
    var j = 0; 
} 

function parallelSockets(){ 
    for(var i = 0 ;i<count;i++){ 
     sockets[i].send(new Date().getTime()); 
    } 
} 

Và đây mã của socket.io-server:

socket.on('message',function(message){ 
    start = new Date().getTime(); 
    socket.send(message); 
    end = new Date().getTime() - start; 
    logfile.write(end+"\n"); 
}); 

Có cơ chế bảo mật trên ổ cắm. io chặn rất nhiều tin nhắn song song và các kết nối tạo thành một khách hàng?

Ai đó có thể giúp tôi không?

+0

lỗi gì Node.js in trên sụp đổ? –

+0

node.js chỉ in trên sự cố chữ "Bị giết". – CodeChiller

+0

Nó có thể đơn giản là vì bạn đang hết các bộ mô tả tập tin. Hãy thử chạy 'ulimit -n' là cùng một người dùng đang chạy node.js (nếu bạn đang sử dụng Linux, ít nhất). Bạn có thể thay đổi giá trị này bằng cách sử dụng 'ulimit' hoặc, vĩnh viễn hơn, trong tệp cấu hình như là'/etc/security/limits. {Conf, d} '. –

Trả lời

4

tôi làm chuẩn Cài đặt máy chủ Socket.IO và SockJS.

Kết quả có thể được tìm thấy ở đây: http://mrjoes.github.com/2011/12/15/sockjs-bench.html

bộ thử nghiệm là ở đây: https://github.com/mrjoes/sock-benchmarking

Được viết bằng Java, hỗ trợ 3 vận tải: Socket.IO 0.7+, SockJS 0.2+, Websockets thô. Không có nhị phân biên dịch, nhưng bạn có thể lấy Eclipse để biên dịch nó hoặc chỉ sử dụng dòng lệnh javac.

+0

Cảm ơn câu trả lời của bạn, tôi có một câu hỏi. Bạn đã tạo Socket.io Benchmark với 2000 WebSockets như thế nào? Tôi chỉ có thể mở khoảng 1000 ổ cắm. Nếu tôi muốn mở thêm máy chủ sẽ bị lỗi hoặc không có sẵn. – CodeChiller

+0

Đảm bảo bạn tăng giới hạn như được mô tả ở đây: http://serverfault.com/questions/48717/practical-maximum-open-file-descriptors-ulimit-n-for-a-high-volume-system – Joes

+0

@Joes là của bạn điểm chuẩn trên 45k mỗi giây trên nút trên mỗi lõi hoặc nhóm? Chỉnh sửa: Không bao giờ: 'sử dụng lõi đơn', wow, 45k gửi đi? Thật điên rồ. Cảm ơn bạn đã chuẩn bị !! –

0

Bạn có thể kiểm tra Akinji

Nó mở ổ cắm đồng thời đến máy chủ và lắng nghe được thông điệp và in chúng

http://github.com/sonsuzdongu/akinji

python akinji.py -c 100 --host localhost --port 3000 --waitFor 100 --on "some msg"