JSON-RPC — как сделать уникальный идентификатор?

При вызове службы JSON-RPC какой наиболее распространенный способ создания уникального идентификатора из клиента JavaScript?

ПЕРЕСМОТРЕННЫЙ ВОПРОС:

Как правило, клиент JavaScript JSON-RPC реализует параметр подсчета id (например, если последний запрос был id=1, и он не получил ответа, следующий запрос будет id=2. Если запрос с id=1 ответил, следующий запрос может быть id=1 снова). Мне интересно понять, как люди обычно реализуют это.


person orokusaki    schedule 08.12.2010    source источник


Ответы (1)


Вы не описываете вселенную, в которой это должно быть уникальным.

Если вы имеете в виду абсолютно уникальный, то вы говорите об UUID.

Если вам нужно что-то уникальное для конечной точки, чтобы предотвратить кэширование на стороне клиента, этого будет достаточно.

var unique = new Date().getTime();

Если вам нужно что-то другое, кроме этих двух, вам нужно быть более конкретным.

РЕДАКТИРОВАТЬ

Может быть, что-то похожее на это

jsonRpcClient = function()
{
  var requestStack = [null];

  this.makeRequest = function()
  {
    var id = this.getAvailableSlot();
    requestStack[id] = new this.request( id, arguments );
  }

  this.getAvailableSlot: function ()
  {
    for ( var i = 0; i < requestStack.length: i++ )
    {
      if ( null == this.requestStack[i] )
      {
        return i;
      }
    }
    return i;
  }

  this.request: function( id, args )
  {
    // request stuff here
    // pass id and whatever else to jsonRpcClient.handleResponse()
  }

  this.handleResponse: function( id )
  {
    var request = requestStack[id];
    requestStack[id] = null;

    // Do whatever with request
  }
};
person Peter Bailey    schedule 08.12.2010
comment
Это просто для того, чтобы клиент (браузер) сопоставлял запросы с ответами (для асинхронных запросов). Дело не в том, что он должен быть таким же уникальным, как UUID или даже текущее время. На самом деле это почти всегда может быть 1. Обычно он начинается с 1, затем 2 и так далее, если только 1 не возвращается до отправки другого запроса (т. е. не асинхронного). В этом случае идентификатор всегда 1. Мне более или менее интересно узнать, как большинство людей реализуют это. Прошу прощения за плохо сформулированный вопрос. - person orokusaki; 08.12.2010
comment
Похоже, все, что вам нужно, это тип стека следующего доступного слота, где индекс элемента массива будет вашим идентификатором. - person Peter Bailey; 09.12.2010