Blockchain 无法调用erisdb.eventPoll rpc调用

Blockchain 无法调用erisdb.eventPoll rpc调用,blockchain,eris-blockchain,Blockchain,Eris Blockchain,我的区块链在本地运行。我使用节点json rpc模块进行rpc调用。我能打几个像erisdb.getBlockchainInfo这样的电话。 我尝试了erisdb.eventSubscribe呼叫: client.call( { "jsonrpc": "2.0", "method": "erisdb.eventSubscribe", "params": { "event_id": "NewBlock" }, "id": "0" }, 它成功地向我返回了一个s

我的区块链在本地运行。我使用节点json rpc模块进行rpc调用。我能打几个像erisdb.getBlockchainInfo这样的电话。 我尝试了erisdb.eventSubscribe呼叫:

client.call(
  {
    "jsonrpc": "2.0", "method": "erisdb.eventSubscribe", "params": {
      "event_id": "NewBlock"
    }, "id": "0"
  },
它成功地向我返回了一个sub_id

{ result: { sub_id: '7878EB2ECC668AEE19D958B89C4ED6E145D9298E91366D67F93CD2A20E995829' },
      error: null,
      id: '0',
      jsonrpc: '2.0' }
我使用该sub_id调用erisdb.eventPoll调用:

client.call(
  {
    "jsonrpc": "2.0", "method": "erisdb.eventPoll", "params": {
      "sub_id":"7878EB2ECC668AEE19D958B89C4ED6E145D9298E91366D67F93CD2A20E995829"
    }, "id": "1"
  },
但它给出了以下错误

{ result: null,
  error:
   { code: -32603,
     message: 'Subscription not active. ID: 7878EB2ECC668AEE19D958B89C4ED6E145D9298E91366D67F93CD2A20E995829' },
  id: '1',
  jsonrpc: '2.0' }

我的eris db版本是0.12.1。目前我们有两种不同的API。您正在使用的那个我们称之为“v0”API。它针对长轮询Javascript客户端进行了优化。我的猜测是,您的订阅在某个硬编码超时(恰好是10秒)之前获得了回报。在
eventSubscribe
呼叫之后,您是否尝试过快速成功地拨打
eventPoll
呼叫

这是“v0”收获函数:。它以循环方式运行,清除最近未轮询的旧订阅。如果您在轮询之前等待的时间超过10秒,则您的订阅可能已被收获(删除)

我们有另一个为连锁管理优化的API,称为“tendermint”API(因为它继承了tendermint共识引擎的传统)。它是一种并行API,由eris pm工具使用。它还有一个可由websocket端点访问的subscribe方法。这可能对您有用,因为它的订阅从未获得回报

您可以这样尝试:

启动您的链:

$ eris chains start testchain
获取一个简单的websocket客户端:

$ go get github.com/raphael/wsc
连接到websocket端点:

$ wsc ws://0.0.0.0:46657/websocket
2017/01/21 01:03:51 connecting to ws://0.0.0.0:46657/websocket...
2017/01/21 01:03:51 ready, exit with CTRL+C.
通过将
{“jsonrpc”:“2.0”,“method”:“Subscribe”,“params”:[“NewBlock”]}
作为一行粘贴到终端中,订阅
NewBlock
事件:

>> { "jsonrpc": "2.0", "method": "subscribe", "params": ["NewBlock"] }
然后,您应该会收到一个新的块事件流(大约每秒1个),如:


目前我们有两种不同的API。您正在使用的那个我们称之为“v0”API。它针对长轮询Javascript客户端进行了优化。我的猜测是,您的订阅在某个硬编码超时(恰好是10秒)之前获得了回报。在
eventSubscribe
呼叫之后,您是否尝试过快速成功地拨打
eventPoll
呼叫

这是“v0”收获函数:。它以循环方式运行,清除最近未轮询的旧订阅。如果您在轮询之前等待的时间超过10秒,则您的订阅可能已被收获(删除)

我们有另一个为连锁管理优化的API,称为“tendermint”API(因为它继承了tendermint共识引擎的传统)。它是一种并行API,由eris pm工具使用。它还有一个可由websocket端点访问的subscribe方法。这可能对您有用,因为它的订阅从未获得回报

您可以这样尝试:

启动您的链:

$ eris chains start testchain
获取一个简单的websocket客户端:

$ go get github.com/raphael/wsc
连接到websocket端点:

$ wsc ws://0.0.0.0:46657/websocket
2017/01/21 01:03:51 connecting to ws://0.0.0.0:46657/websocket...
2017/01/21 01:03:51 ready, exit with CTRL+C.
通过将
{“jsonrpc”:“2.0”,“method”:“Subscribe”,“params”:[“NewBlock”]}
作为一行粘贴到终端中,订阅
NewBlock
事件:

>> { "jsonrpc": "2.0", "method": "subscribe", "params": ["NewBlock"] }
然后,您应该会收到一个新的块事件流(大约每秒1个),如: