代码非常简单,应该可以从内存中释放对象,这个应用程序中大约有20个并发用户。
代码的思想是sessionID是存储对象的键,当会话结束时,对象被释放。
密码
'use strict'
const http = require('http')
const app = require('./config')
const Server = http.Server(app)
const PORT = process.env.PORT || 8000
const io = require('socket.io')(Server)
Server.listen(PORT, () => console.log('Game server running on:', PORT))
const players = {}
const moneys = {}
var util = require('util');
io.on('connection', socket => {
socket.on('new-player', state => {
players[socket.id] = state
io.emit('update-players', players)
var pCount = Object.keys(players).length;
console.log("players in mem "+pCount);
});
socket.on('new-money', state => {
moneycounter++
moneys[socket.id] = state
if (moneycounter >2) {
io.emit('update-moneys', moneys)
moneycounter = 0
}
});
socket.on('disconnect', state => {
console.log(socket.id+' player discontinue with state:', state)
try {
if (typeof players[socket.id].playerName != 'undefined') delete players[socket.id].playerName
if (typeof players[socket.id].speed != 'undefined') delete players[socket.id].speed
}
catch (err) {
console.log(socket.id+' typeerror deleting 1')
}
delete players[socket.id]
delete moneys[socket.id]
});
socket.on('move-player', data => {
const { x, y, angle, playerName, speed } = data
if (players[socket.id] === undefined) {
console.log(socket.id+' invalid move')
try {
if (typeof players[socket.id].playerName != 'undefined') delete players[socket.id].playerName
if (typeof players[socket.id].speed != 'undefined') delete players[socket.id].speed
}
catch (err) {
console.log(socket.id+' typeerror 3 deleting')
}
delete players[socket.id]
delete moneys[socket.id]
socket.disconnect();
return
}
players[socket.id].x = x
players[socket.id].y = y
players[socket.id].angle = angle
players[socket.id].playerName = {
name: playerName.name,
x: playerName.x,
y: playerName.y
}
players[socket.id].speed = {
value: speed.value,
x: speed.x,
y: speed.y
}
io.emit('update-players', players)
})
})
出于某种原因,我的应用程序需要20mb内存
但当天晚些时候超过1.5GB,导致内存R14错误。
我的配置应将其限制为512,如下所示:
web节点--针对大小优化\u--最大\u old\u space\u size=460
--gc\U间隔=100服务器/索引。js公司
我当前的配置是2倍。(1024 mb计划)
是否有配置heroku以在发生内存错误R14时重新启动的选项。