Подтвердить что ты не робот

Socket.io, разница между socket.set() и свойством socket?

Socket.io рекомендует параметры для каждого сокета:

socket.set('foo', bar, function () {});

Переменные также могут быть установлены и доступны в сокете:

socket.foo = bar

Можно ли использовать функцию set()?

4b9b3361

Ответ 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.