Являются ли переменные модуля node.js общими для нескольких вызовов? - PullRequest
2 голосов
/ 19 июня 2011

я создаю сервер node.js, где у меня есть модуль «уведомления».Каждый запрос на сервере узла будет вызывать этот модуль, и мне нужно иметь набор личных переменных для каждого отдельного вызова.

Например, когда выполняется запрос к модулю уведомлений, он должен помнить идентификатор пользователя, время запроса, идентификатор сеанса и т. д.

Как я могу сделать это эффективно?

Если я просто объявляю переменные в области видимости модуля, они кажутся общими для каждого вызова модуля.Поэтому он не может запомнить данные каждого запроса в частном порядке.

Мне нужно каждый раз, когда я вызываю модуль node.js, он запоминает свои данные в это время.Итак, укажите, как я могу это сделать?

Спасибо,
Anjan

Обновление

Сервер node.js предназначен для использования в качестве сервера чата.модуль «уведомления» будет сканировать БД на наличие новых сообщений и отправлять вывод в формате json клиенту, используя технику длинного опроса.

Я попытался обернуть данные и функции в объект.Затем каждый раз, когда делается запрос к серверу чата, создается новый объект, который будет выполнять нужные функции.Но он вместо того, чтобы работать параллельно, выполняет каждый запрос последовательно.Итак, если я сделаю 3 запроса к серверу, они просто встают в очередь и выполняются один за другим.

Любая подсказка по этому поводу?

Исходный код модуля можно найти здесь: http://www.ultrasoftbd.com/notifications.js

Спасибо, Анжан

1 Ответ

0 голосов
/ 19 июня 2011

Есть несколько способов решения этой проблемы:

1) Пусть ваш модуль экспортирует конструктор, который может вызываться пользователями API вашего модуля, чтобы дать им новый экземпляробъект.Таким образом, у каждого пользователя будет свой экземпляр объекта, который имеет свои собственные частные переменные.

// Client example.
var mod = require('myModule')
  , sess = new mod.Session();
sess.method(args);
sess.finalize();

2) Пусть ваш модуль предоставит интерфейс «реестра» для этих частных переменных, который включает в себя идентификатор, уникальный для вызывающей стороны..

// Client example.
var mod = require('myModule');
var id = mod.initialize(); // Returns a unique ID.
mod.method(id, args); // Each method requires the ID.
mod.finalize(id);

Эти решения разделяют идею о том, что каждый экземпляр (или ID) отслеживается вашим модулем отдельно, так что статистику (или что-то еще делает ваш модуль) можно вычислять для каждого экземпляра клиента, а не глобально длямодуль.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...