首页 > 解决方案 > ISSLive Telemetry: Locking Protocol SQLite3 C++ error on query, with Javascript code update the same SQLite3 database, all on WSL

问题描述

我正在尝试根据来自 lightstreamer 服务器的遥测重复更新 C++ 中的一些值。该遥测数据是来自国际空间站 (ISSLive) 的实时数据,我将使用它来表达相同的 VR 模拟模型。我已经涵盖了 VR 模拟方面;我只需要数据流方面的帮助。这是代码的公开要点:https ://gist.github.com/connorjak/9f853bb83559976e12c9e38811c3c0af

工作起点

这个项目的起点是ISS-Mimic 项目。这是他们的(工作)架构:

(在树莓派上运行)

  1. Pythondatabase_initialize.py删除然后重新初始化 SQLite3 数据库/dev/shm/iss_telemetry.db
  2. PythonGUI.py建立同目录的SQLite3连接,应用于isolation_level = None连接对象
  3. 在某个时间点GUI.py,一个 Python 子进程被打开ISS_Telemetry.js
  4. NodeJSISS_Telemetry.js与同一目录建立 SQLite3 连接,使用以下行:var db = new sqlite3.Database("/dev/shm/iss_telemetry.db", sqlite3.OPEN_CREATE | sqlite3.OPEN_READWRITE);
  5. ISS_Telemetry.js建立到 lightstreamer 服务器的 LightstreamerClient 连接,使用setSlowingEnabled(false)
  6. ISS_Telemetry.js监听 Lightstreamer 连接并使用新数据更新 SQLite 数据库。
  7. GUI.py继续重复执行选择查询和 fetchall() 以在每个滴答声中获取完整的遥测数据。

非工作当前架构

现在,这是我的架构,主要区别是粗体

(在 Windows 10 1903、WSL 和 Ubuntu 18.04 LTS上运行)

  1. C++ISSLIVE.cpp调用system(...)启动和等待 Pythondatabase_initialize.py
  2. Pythondatabase_initialize.py删除然后重新初始化 SQLite3 数据库/dev/shm/iss_telemetry.db
  3. C++ISSLIVE.cpp建立到同一目录的 SQLite3 连接,不适isolation_level = None用于连接对象(在 C API 中找不到等效功能)
  4. ISSLIVE.cpp调用system(...&)开始而不是等待 NodeJSISS_Telemetry.js
  5. NodeJSISS_Telemetry.js与同一目录建立 SQLite3 连接,使用以下行:var db = new sqlite3.Database("/dev/shm/iss_telemetry.db", sqlite3.OPEN_CREATE | sqlite3.OPEN_READWRITE);
  6. ISS_Telemetry.js建立到 lightstreamer 服务器的 LightstreamerClient 连接,使用setSlowingEnabled(false)
  7. ISS_Telemetry.js监听 Lightstreamer 连接并使用新数据更新 SQLite 数据库。
  8. ISSLIVE.cpp继续重复执行选择查询 ( sqlite3_exec(...)) 以在每个滴答声中获取完整的遥测数据。查询通过回调传递以将所有接收到的表数据打印到 cout

问题

而不是去回调函数并打印任何数据,而是sqlite3_exec(...)返回错误代码 15: PROTOCOL (Locking Protocol error)。这恰好在十秒后发生。

问题

我应该怎么做才能调试这个?我尝试使用 valgrind callgrind 来找出计算违规者,但似乎发生的任何事情都不是计算量大(此代码中花费的计算时间非常短)。

我也可以尝试用另一种架构替换这种架构。我是不是该?我会用什么?我无法更改此数据的源服务器。我之前在cpp-lsclient(Lightstreamer 的 C++ 实现)上遇到了错误。该 repo 似乎只有 lightstreamer 的部分实现。

更多信息

标签: javascriptc++sqlitewindows-subsystem-for-linuxlightstreamer

解决方案


推荐阅读