2016-08-18 17 views
0

我試圖重新創建一個硬件串行服務器的功能與節點,它實際上工作,但我從套接字實例已被關閉錯誤。Net.Socket實例不會消失在NodeJS

下面是一個簡化版本的應用程序,以顯示我在做什麼...

var net = require('net'); 
var SerialPort = require('serialport'); 
var connectionCounter = 0; 
var port = new SerialPort('/dev/ttyUSB0', function() { 
    var server = net.createServer(); 
    server.on('connection',function(socket) { 
     connectionCounter++; 
     var connNumber = connectionCounter; 
     socket.on('error', function() { 
     console.log('socket ' + connNumber + ' errored'); 
     }); 
     socket.on('data', function(data) { 
     port.write(data); 
     }); 
     port.on('data', function(data) { 
     socket.write(data); 
     }); 
    }); 
    server.listen(8887, '127.0.0.1'); 
    } 
}); 

所以這是發送到8887端口的代碼的第一塊工作正常,並返回數據傳回了通過插座。錯誤從第二個塊開始。在這個例子中,我保持套接字實例的計數並輸出帶有錯誤的套接字實例號。所以隨着程序的運行,套接字實例的數量不斷增加。最近的實例最終將處理數據,但我無法弄清楚我需要刪除的內容來清理所有先前的套接字實例,以便它們將停止嘗試處理傳入的數據。

我試過socket.end()和socket.destroy(),但這些似乎並沒有工作。我是否需要儘可能刪除服務器本身並重新創建它?

回答

0

如果有誰認爲這和關心發生了什麼事情錯了,我設置一個串口對象的每一個新的網絡套接字的創建時間事件偵聽器。所以,即使我每次關閉套接字時都要刪除套接字,串口監聽器仍然試圖將數據發送到所有舊的已刪除套接字。所以解決方案是在關閉網絡套接字時從串口對象中移除監聽器。

0

你可以使用數組來存儲套接字,以後可以刪除。這是示例代碼希望你有這個想法

var net = require('net'); 
var SerialPort = require('serialport'); 
var connectionCounter = 0; 
var mySockets = []; 
var port = new SerialPort('/dev/ttyUSB0', function() { 
    var server = net.createServer(); 
    server.on('connection',function(socket) { 
    mySockets.push(socket); 
     connectionCounter++; 
     var connNumber = connectionCounter; 
     socket.on('error', function() { 
     console.log('socket ' + connNumber + ' errored'); 
     }); 
     socket.on('data', function(data) { 
     port.write(data); 
     }); 
     port.on('data', function(data) { 
     socket.write(data); 
     }); 
    }); 
    server.listen(8887, '127.0.0.1'); 
    } 
//get the sockets you want to delete 
var s = mySockets.pop(); 
s = null; 
}); 
+0

將套接字設置爲null或undefined,或者甚至使用delete都不起作用。不知何故,它仍在監聽該端口並拋出錯誤消息。我想刪除錯誤的東西嗎? – tantangula

+0

你對記錄套接字是正確的,但事實證明,我在串口上放置了一個監聽器,導致了錯誤。感謝您花時間幫助。 – tantangula