Вопрос по socket.io, node.js – socket.io socket.set и socket.get - для чего нужен аргумент обратного вызова?

18

Я просто хочу прикрепить некоторые переменные к своим сокетам, но я не понимаю методы .get и .set. У них обоих есть третий аргумент для обратного вызова. Можно ли это опустить? Для чего это?! Есть ли в обратном вызове аргументы?

Мое лучшее предположение состоит в том, что это происходит, когда socket.io не использует хранилище памяти, но сохраняет эти данные где-то еще и нуждается в обратном вызове проверки ошибок.

<code>socket.on('set nickname', function (name) {
    socket.set('nickname', name, function (arguments) {
      doSomethingMysterious();
    });
</code>

Я использую socket.io 0.9.x

Функция определена в socket.js

<code>/**
 * Stores data for the client.
 *
 * @api public
 */

Socket.prototype.set = function (key, value, fn) {
  this.store.set(key, value, fn);
  return this;
};
</code>

Ваш Ответ

2   ответа
34

get а такжеset функции на объекте сокетабыли удалены в версии 1.x, Правильный способ хранения и получения значений теперь - через свойства объекта сокета, например:

socket.on('set nickname', function (name) {
  socket.nickname = name;
});

Как видно наПример кода из официального репо.

Где это будет храниться? Будет ли это доставлено клиенту или сохранено только на стороне сервера?
12

set а такжеget являются асинхронными. Обратный вызов будет вызван, когда эти операции будут завершены. Вы можете опустить его или использовать для любых целей, а не только для обработки ошибок.

а что .store по умолчанию это redis? Или это просто так, чтобы вы могли создать свой собственный магазин?
Спасибо, тот факт, что они асинхронны, облегчает оборачивать все вокруг. В обычных случаях это будет использоваться для сохранения значений в БД где-нибудь, а затем использовать другой emit обратно клиенту, чтобы сообщить им, что он сохранен? Полагаю, мне до сих пор неясно, кроме коллизии пространства имен, почему мы не можем просто использовать что-то вродеsocket.property=value;   Просто начал с node.js 2 дня назад, пожалуйста, прости мое невежество! Karl Keefer
Да, хорошая причина, почему вы бы использоватьset, get (как вариант, просто сохранить значение в объекте), это сохранить его в БД. по фактуsocket.io похоже уже есть билд вredis store, но я не пользователь socket.io, поэтому не могу сказать, как это можно использовать. Если вы посмотрите на исходный код, при вызовеset это ставит значение вstore: github.com/LearnBoost/socket.io/blob/master/lib/socket.js#L246
@Funkodebat нет, по умолчанию это фактически MemoryStore, вам нужно будет настроить использование Redis Store.github.com/LearnBoost/socket.io/wiki/Configuring-Socket.IO

Похожие вопросы