JSON-RPC - 如何制作一个唯一的 ID?

Posted

技术标签:

【中文标题】JSON-RPC - 如何制作一个唯一的 ID?【英文标题】:JSON-RPC - how can one make a unique ID? 【发布时间】:2010-12-08 17:26:10 【问题描述】:

在调用 JSON-RPC 服务时,从 javascript 客户端生成唯一 ID 的最常用方法是什么?

修改后的问题:

通常,JavaScript JSON-RPC 客户端实现计数id 参数(例如,如果最后一个请求是id=1,并且它没有收到回复,则下一个请求是id=2。如果请求与id=1 已响应,下一个请求可以是id=1 再次)。我有兴趣了解人们通常如何实现这一点。

【问题讨论】:

【参考方案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
  
;

【讨论】:

这仅用于客户端(浏览器)将请求与响应匹配(用于异步请求)。并不是说它必须像 UUID 甚至当前时间一样唯一。事实上,它几乎总是1。它通常以1 开头,然后是2 等等,除非在发送另一个请求之前返回1(即,不是异步的)。在这种情况下,id 总是1。我或多或少有兴趣了解大多数人是如何实现这一点的。对于措辞不当的问题,我深表歉意。 听起来你只需要一个“下一个可用槽”类型的堆栈,其中数组元素的索引将是你的 ID。

以上是关于JSON-RPC - 如何制作一个唯一的 ID?的主要内容,如果未能解决你的问题,请参考以下文章

我如何制作一个在不同的线段上具有唯一ID的PlotDataItem?

如何用 Python 制作唯一的短 URL?

如何生成 4 位唯一 id,如 discord id,如 #8052

如何在 SQL 中自动生成唯一 ID,如 UID12345678?

[精选]分库分表之后,id 主键如何处理?如何保持全局唯一

如何为 django 中的每个匿名用户提供一些唯一的 id