nodejs ssh2 shell函数丢失包的问题
来源:互联网 发布:年轻人理财软件 编辑:程序博客网 时间:2024/05/30 05:07
在这两天被ssh2的shell函数给折磨怕了,我和室友用下面的代码,在一个连接上面连续多次(有时候一百多次,有时候七八百次)执行shell命令就会出现发包丢失,或者根本发命令发不过去的情况,资料又比较少,文档也少,用的人也少,只有去shh2的源码中去看,最后发现ssh2的shell函数返回的stream是一个双工流,然后去nodejs里面去查看关于双工流的介绍,结果试了一些网上介绍的pause和resume函数也没有解决这个问题。我的猜测大概原因是缓冲区堆积的东西太多导致缓冲区爆了之外也有可能是stream再调用end函数之后,将数据发送过去,这个时候缓冲区空了,而远程的机器还没有返回数据过来,导致调用end函数之后直接将stream流自动close了。
function shell(conn, cmd, then) { conn.shell(function(err, stream) { if(err) { then(err); } else { var buf = ''; stream.on('close', function() { then(err, buf); }).on('data', function(data) { buf = buf + 'data'; }).stderr.on('data', function(data) { console.log('stderr :' + data); }); stream.end(cmd); } });}
在经过多次查找百度、必应寻找问题未果之后,当然也试了各种各样的方法,之后我室友用exec函数试了一下,跑起来轻松愉快无压力,一下子跑个几千几万条命令毫无压力,顿时觉得轻松了许多,虽然还是没有知道shell函数丢包的原因,但总算也找到了一个替代方案,希望知道原因的兄弟能够告知原因。使用exec函数替代shell运行命令代码如下:
function exec(conn, cmd, then) { conn.exec(cmd, function(err, stream) { var buf = ''; stream.pipe(through(function onWrite(data){ buf = buf + data; },function onEnd(){ stream.unpipe();// 一定要关闭 })); stream.on('close', function() { then(null, buf); }); });}
0 0
- nodejs ssh2 shell函数丢失包的问题
- nodejs ssh2 shell函数发送命令不成功的问题
- nodejs ssh2 基本功能的封装
- 多线程调用ch.ethz.ssh2.Connection执行shell任务时有的执行丢失情况解决
- Nodejs ssh2 exec执行shell超时终止执行
- R包丢失问题。
- SSH2 主要知识点+SSH2的jar包详解
- java方向的SSH2问题
- [node]nodejs ssh2测试
- ssh2框架需要的jar包
- SSH2框架需要的jar包
- nodejs ssh2 解析带密钥的私钥登陆
- 发布到Tomcat丢失依赖jar包的问题
- nodeJs包的概念
- NodeJs的包
- 学习nodejs第一课,关于js的闭包问题。
- shell脚本read line丢失制表符问题
- ssh2 jar包配置
- 单一职责原则
- 在FPGA中使用Verilog实现I2C通信
- Leetcode 326 Power of Three
- 关于简单页面的布局(导航栏、内容栏、结尾栏)
- self.navigationController退出到指定页面,或者一次性pop出n个页面
- nodejs ssh2 shell函数丢失包的问题
- spring<mvc:resources> 标签的使用 静态资源的访问
- 观察者模式
- HTTP中Get与Post的区别
- java编程面试——风口的猪-中国牛市
- poj1384HDU1114Piggy-Bank(完全背包)
- servlet的init()方法和service()方法的区别
- Dev-C++百科全书
- 知识点掌握情况