我已经使用 Express 和 Socket.IO 创建了一个简单的聊天应用程序,现在我已经在使用 IISNode 的托管服务提供商上设置了它。我遇到的问题是套接字连接大约每两分钟重新连接一次。无论套接字上是否有活动,都会发生这种情况。
来自主机的技术支持告诉我,我的应用程序总是使用大量内存。这对我来说似乎不太可能。据我所知,每个域都分配了 512MB 的内存。他们告诉我,当内存用完时,应用程序池会被回收,这就是我的应用程序不断重新连接的原因。我已经无休止地测试了这段代码。即使在我的开发机器上运行它,我的 node.exe 进程也不会使用超过 32MB 的内存。
所以我需要一个健全性检查;下面是我的代码。我真的在这里做一些愚蠢的事情吗?有没有办法让我分析应用程序以找出它实际使用了多少内存?
服务器端:
var express = require('express');
var http = require('http');
var app = express();
var server = http.createServer(app);
var io = require('socket.io').listen(server);
app.use(express.static(__dirname + '/public'));
io.configure(function() {
io.set('resource', '/public/socket.io');
});
io.sockets.on('connection', function (socket) {
socket.on('fromClient', function (data) {
io.sockets.emit('fromServer', { who: data.who, message: data.message });
});
});
server.listen(process.env.PORT || 8080);
客户端:
window.addEventListener("load", function () {
var msgContainer = document.getElementById("msgContainer");
var btnSend = document.getElementById("sendMessage");
//this is my localhost, of course, substituted by my domain name on live
var socket = io.connect('http://localhost:8080/', {
resource: 'public/socket.io'
});
var theWho = document.getElementById("theWho");
var newMessage = document.getElementById("newMessage");
if (newMessage.addEventListener) {
newMessage.addEventListener('keyup', newMessage_keyUp, false);
} else if (btnSend.attachEvent) {
newMessage.attachEvent('onkeyup', newMessage_keyUp);
}
function newMessage_keyUp(e) {
if (e.keyCode == 13) {
messageToServer();
}
}
function messageToServer() {
var who = theWho.value;
var message = newMessage.value;
if (who == "") {
who = "Anon";
}
socket.emit("fromClient", {
who: who,
message: message
});
newMessage.value = "";
newMessage.focus();
}
if (btnSend.addEventListener) {
btnSend.addEventListener('click', messageToServer, false);
} else if (btnSend.attachEvent) {
btnSend.attachEvent('onclick', messageToServer);
}
socket.on('fromServer', function (data) {
addMessage(data.who, data.message);
});
//THIS is what keeps firing ever ~2 minutes
socket.on('connect', function () {
socket.emit("fromClient", {
who: "Server",
message: "New user connected.."
})
})
function addMessage(who, message) {
var m = document.createElement("div");
m.innerHTML = "<strong>" + who + ":</strong> " + message;
m.setAttribute("class", "msg");
msgContainer.appendChild(m);
m.scrollIntoView();
}
});