首页 > 解决方案 > NodeJS:SSH2 - 从流中读取最后 1000 个字母

问题描述

我有一个 Vue 应用程序,其中包含一个用于 xterm 的组件并与之并行我使用 ssh2/shell 作为具有全局 Vue 插件的客户端。我可以通过我的 ssh 插件连接到我的 xterm 组件上的服务器,并将我的 ssh 流与事件
一起写入 xterm 。 到目前为止一切顺利,效果很好。stream.on('data', cb)

我的问题从这里开始......如果我切换到另一个 Vue 路由并回到我的 xterm 组件。
xterm 组件被重新创建,当然,它是空的。有没有办法访问旧的流数据以及我错过的流数据,因为我从现有的流对象中离开了组件(它存在于我的全局 Vue 插件中)?我只需要用我的 ssh 连接的最后 1000 个字母来初始化我的 xterm 组件。

标签: node.jsvue.jsxtermssh2

解决方案


我只是在我的“on Data”事件上调用一个单独的函数并将数据/块复制到一个字符串中。当我重新创建终端组件时,我使用缓冲区字符串初始化内容。此外,我可以观察我的“缓冲区”是否太满并对其进行切片。
如果有人遇到同样的情况,这里有一个例子:

stream.on('data', (data) => {
    ...
    this.buffer(data)
})
...
buffer(data) {
    this.streamBuffer += data // Saving data/chunks

    const bufferLength = this.streamBuffer.length
    if (bufferLength > 10000) {
        this.streamBuffer = this.streamBuffer.slice(bufferLength - 8000)
    }
}

推荐阅读