一个电子应用程序,它使用ipcMain和ipcRenderer进程在点击按钮时发送telnet命令以及 npm telnet-client 库,用于桌面应用程序和服务器之间的Telnet连接。远程设备(服务器)。我是承诺的新手,所以无法弄清楚正确的实现。
问题:每次单击按钮时,都会建立新的Telnet会话,并且在20个并发会话后,我的远程设备将无响应。为了解决这个问题,我在connect.exec()在Telnet连接上完成后添加了connection.end(),它通过在发送命令后关闭连接以某种方式改进了功能,但也增加了延迟。然而,我也意识到这不会一直有效,并且会间歇性地跳过连接打开。
问题:如何检查Telnet会话是否已经建立,然后通过现有会话发送命令,而不是每次创建新会话,并在明确关闭后运行。
server.html
<script>
const {ipcRenderer} = require('electron')
function sendCommand(channel, arg){
ipcRenderer.send(channel, arg)
}
</script>
<button onclick="sendCommand('channel-1', 'command1');"> Command 1 </button>
<button onclick="sendCommand('channel-1', 'command2');"> Command 2 </button>
main.js
const {ipcMain} = require('electron')
var Telnet = require('telnet-client')
var connection = new Telnet()
ipcMain.on('channel-1', (event, arg) => {
var params = {
host: '192.168.1.121',
port: 23,
shellPrompt: ' ',
timeout: 1500,
}
var cmd = arg
connection.on('ready', function(prompt) {
connection.exec(cmd, function(err, response) {
console.log(response)
})
})
connection.on('timeout', function() {
console.log('socket timeout!')
connection.end()
})
connection.on('close', function() {
console.log('connection closed')
})
connection.connect(params)
})
提前致谢。
答案 0 :(得分:0)
以下修改帮助我通过现有的telnet通道发送命令而不创建多个telnet会话,现在发送telnet命令的速度很快。
var params = {
host: '192.168.1.121',
port: 23,
shellPrompt: ' ',
timeout: 1500,
// removeEcho: 4
}
connection.connect(params)
var cmd = "a temp command"
connection.on('ready', function(prompt) {
connection.exec(cmd, function(err, response) {
console.log(response)
})
})
connection.on('timeout', function() {
console.log('socket timeout!')
connection.end()
})
connection.on('close', function() {
console.log('connection closed')
})
ipcMain.on('channel-1', (event, arg) => {
cmd = arg
if(connection.getSocket().writable){
connection.exec(cmd, function(err, response) {
console.log(response)
})
}else{
console.log("connection closed!" + connection.getSocket().writable)
}
})