Express と Socket.IO を使用して単純なチャット アプリケーションを作成し、IISNode を使用するホスティング プロバイダーにセットアップしました。私が抱えている問題は、ソケット接続が約 2 分ごとに再接続し続けることです。これは、ソケット上でアクティビティがあるかどうかに関係なく発生します。
ホストの技術サポートから、私のアプリケーションは常に大量のメモリを使用すると言われました。これは私には非常にありそうにないようです。私の知る限り、各ドメインには 512MB のメモリが割り当てられています。彼らは、メモリが使い果たされるとアプリケーション プールがリサイクルされると私に言いました。これが、私のアプリが再接続し続ける理由です。私はこのコードを際限なくテストしました。これを開発マシンで実行しても、node.exe プロセスが 32 MB を超えるメモリを使用することはありません。
したがって、健全性チェックが必要です。以下は私のコードです。私は本当にここで愚かなことをしていますか?アプリケーションが実際に使用しているメモリの量を調べるために、アプリケーションをプロファイリングする方法はありますか?
サーバー側:
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();
}
});