首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >changefeeds是否有相同的过滤器也有相同的光标?

changefeeds是否有相同的过滤器也有相同的光标?
EN

Stack Overflow用户
提问于 2018-06-09 19:14:37
回答 1查看 52关注 0票数 0

代码:

代码语言:javascript
运行
复制
const WebSocket = require('ws')
const r = require('rethinkdb')

async function start () {
  try {
    /**
     * Connect database
     */
    const conn = await r.connect()
    conn.use('app')

    /**
     * Create socket server
     */
    const wss = new WebSocket.Server({ port: 8082 })
    wss.on('connection', (client) => {
      /**
       * Client setting subscribe rethinkdb data
       * WARNING : doesn't validate payload
       */
      client.on('message', (payload) => {
        const filterData = JSON.parse(payload)

        /**
         * Send all data base on filter
         *

        /**
         * Subscribe rethink data base on message request
         * Send all data base on update
         */
        r.table('foo')
          .changes({
            'includeTypes': true,
            'includeInitial': true,
            "squash": true // Squash many changes into one event
          })
          .run(conn, async (err, cursor) => {
            if (err) {
              throw err
            }

            client.cursor = cursor
            cursor.each((err, row) => {
              if (err) {
                throw err
              }

              /**
               * Check if client is connected
               * Else close cursor
               *
               * Also useful for check if connect is dead
               */
              if (client.readyState !== client.OPEN) {
                client.terminate()
                client.cursor.close()
                return
              }

              client.send(JSON.stringify(row))
            })

            /**
             * Close stream when :
             * Client disconnect
             * Client send new message
             */

            client.on('message', () => {
              cursor.close()
            })
          })
      })
    })
  } catch (err) {
    console.log(err)
  }
}

start()

错误

代码语言:javascript
运行
复制
    ReqlDriverError: Cursor is closed.
    at ReqlDriverError.ReqlError [as constructor] (d:\project\vietnam-traffic-map\websocket\node_modules\rethinkdb\errors.js:23:13)
    at new ReqlDriverError (d:\project\vietnam-traffic-map\websocket\node_modules\rethinkdb\errors.js:68:50)
    at Feed.IterableResult._promptNext (d:\project\vietnam-traffic-map\websocket\node_modules\rethinkdb\cursor.js:128:10)
    at d:\project\vietnam-traffic-map\websocket\node_modules\rethinkdb\cursor.js:200:22
    at tryCatcher (d:\project\vietnam-traffic-map\websocket\node_modules\bluebird\js\main\util.js:26:23)
    at Function.Promise.fromNode (d:\project\vietnam-traffic-map\websocket\node_modules\bluebird\js\main\promise.js:168:30)
    at Feed.<anonymous> (d:\project\vietnam-traffic-map\websocket\node_modules\rethinkdb\cursor.js:203:20)
    at Feed.<anonymous> (d:\project\vietnam-traffic-map\websocket\node_modules\rethinkdb\util.js:43:16)
    at d:\project\vietnam-traffic-map\websocket\node_modules\rethinkdb\cursor.js:262:24
    at tryCatcher (d:\project\vietnam-traffic-map\websocket\node_modules\bluebird\js\main\util.js:26:23)
    at Promise.successAdapter (d:\project\vietnam-traffic-map\websocket\node_modules\bluebird\js\main\nodeify.js:23:30)
    at Promise._settlePromiseAt (d:\project\vietnam-traffic-map\websocket\node_modules\bluebird\js\main\promise.js:582:21)
    at Promise._settlePromises (d:\project\vietnam-traffic-map\websocket\node_modules\bluebird\js\main\promise.js:700:14)
    at Async._drainQueue (d:\project\vietnam-traffic-map\websocket\node_modules\bluebird\js\main\async.js:123:16)
    at Async._drainQueues (d:\project\vietnam-traffic-map\websocket\node_modules\bluebird\js\main\async.js:133:10)
    at Immediate.Async.drainQueues (d:\project\vietnam-traffic-map\websocket\node_modules\bluebird\js\main\async.js:15:14)

重现问题:

游标连接再次执行第一个游标连接(上一个连接已关闭,但其事件尚未在rethinkdb中保存数据)(此时,我在if statement)

  • The first connection is closed和start close cursor closed)

  • Change stop execute next

  • 中设置了一个断点第二个is next closed

  • Error : cursor closed)

  • Change if rethinkdb

问题:是否有相同的过滤器也有相同的光标?每个websocket客户端都应该有自己的changefeed游标。为什么我先关闭第一个的插座,然后关闭第二个插座?

EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/50773662

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档