鍍金池/ 問答/HTML/ socket.io 是否會(huì)對(duì)外部的變量進(jìn)行保存

socket.io 是否會(huì)對(duì)外部的變量進(jìn)行保存

player = {};//注意:來自其他模塊,并不是在本文件中定義的。用于保存所有用戶的信息

io.sockets.on('connection', function (socket) {
    var currentUser = {//獲取到的用戶數(shù)據(jù)
        uid: 1000, //每一個(gè)用戶代表一個(gè)不同的uid
        socket: socket,
    };
    player[currentUser.uid] = currentUser;//保存用戶連接

    currentUser.socket.on('login', function() {
        currentUser.socket.emit('login_result', 'yes');
    });
    currentUser.socket.on('test', function() {
        currentUser.socket.emit('test_result', 'something');
    });
});

這段代碼出自cnode(https://cnodejs.org/topic/507...,讓我感到疑惑的是每一用戶登陸的時(shí)候player中會(huì)保存其他登陸人的信息,這讓我很難理解,我總是覺得每次執(zhí)行這段代碼的時(shí)候player中的內(nèi)容是空的。能給我解釋以下嗎?

回答
編輯回答
不二心

player 初始狀態(tài)是 {}

每次有新連接進(jìn)來就生成一對(duì)key,value.

player = {
  uid1:{uid:'uid1',socket:socket1},
  uid2:{uid:'uid2',socket:socket2},
}
2017年1月5日 20:03
編輯回答
淡墨

應(yīng)該是player對(duì)象從程序開始就被一直占用,常住于內(nèi)存中(老生代內(nèi)存),并未被清理(內(nèi)存釋放),所以導(dǎo)致每一次連接都會(huì)往里面寫入數(shù)據(jù),而原始數(shù)據(jù)也并未刪除,但這種寫法不推薦使用,有內(nèi)存泄漏的風(fēng)險(xiǎn)。相關(guān)內(nèi)容推薦你閱讀《深入淺出Node.js》第五章內(nèi)存控制這部分。

2018年8月11日 07:59