Socket.io, разница между socket.set() и свойством socket?
Socket.io рекомендует параметры для каждого сокета:
socket.set('foo', bar, function () {});
Переменные также могут быть установлены и доступны в сокете:
socket.foo = bar
Можно ли использовать функцию set()?
Ответы
Ответ 1
Вызов socket.foo
устанавливает ваше свойство в самом объекте сокета. Это не рекомендуется, потому что вы можете переопределить внутреннее свойство, которое использует сокет и зависит от него. Когда вы вызываете socket.set()
, это сохраняется во внутренней структуре данных, которая не будет сталкиваться с внутренними свойствами.
https://github.com/LearnBoost/socket.io/blob/master/lib/socket.js#L246
Socket.prototype.set = function (key, value, fn) {
this.store.set(key, value, fn);
return this;
};
Ответ 2
Я считаю, что основная причина заключается в том, что данные, прикрепленные к сокету, являются многопроцессорными.
Если вы - одноразовый процесс, всегда будет единый процесс, и вы уверены, что не перекрываете внутренний атрибут, socket.foo = bar
будет в порядке. Было бы лучше использовать get/set в качестве основы для будущей проверки и лучших практик.
В мире с несколькими процессами, если вы установите socket.foo = bar
в один процесс, то в другом процессе socket.foo
будет undefined.