19
我想了解哪些是我的應用程序的「物理」限制。Socket.io:如何處理關閉連接?
在客戶端:
var socket = io.connect("http://127.0.0.1:6701");
socket.on('connect', function() {
socket.disconnect();
});
socket.on('disconnect', function() {
socket.socket.reconnect();
});
在服務器端:
var io = require('socket.io').listen(6701);
io.sockets.on('connection', function(socket) {
socket.on('disconnect', function(reason) {
var o = Object.keys(socket.manager.open).length
, c = Object.keys(socket.manager.closed).length
, cA = Object.keys(socket.manager.closedA).length
, h = Object.keys(socket.manager.handshaken).length
console.log("open: " + o)
console.log("closed: " + c)
console.log("handshaken: " + h)
console.log("closedA: " + cA)
console.log("---");
});
});
當OSX我打的文件限制(256)的統計數據如下
open: 471
closed: 235
handshaken: 471
closedA: 235
令我困惑的是:
- 如果我強制關閉連接(這是我想要做的客戶端
disconnect()
,爲什麼我還在使用文件句柄(所以我達到了文件限制)編輯:添加延遲似乎服務器可以保持呼吸,永遠不會達到文件限制)? - 有沒有辦法完全關閉套接字,所以我可以肯定文件限制很少達到(我知道我可以推到65K)?
- 有沒有辦法知道我達到了文件限制,以便我可以停止接受連接?
謝謝
(感謝您的編輯) – Claudio
如果在客戶端,我在斷開連接之前增加了一些延遲(500ms),服務器自行穩定並且永遠不會達到最大文件限制 – Claudio
偉大的問題,Claudio!附:請接受更多答案。 ;) –