私はログファイルを作成し、新しい行をwebsocketにストリームします。ソケットIOが適切に接続を閉じていません
私は複数のログを持っているので、ユーザーにログファイルを選択させてから、そのログの詳細を取得させます。
問題は、別のログを見るために接続を閉じると、接続が変わってしまい、もう一度起動するとデータが2回ストリームされるということです。接続を閉じてもう一度やり直すと、データが3回ストリームされます。
マイpackage.json
:
{
"socket.io": "^2.0.3",
"socket.io-client": "^2.0.3"
}
クライアント側
$("#detailsBtn").click(function (e) {
e.preventDefault();
$.get('/get/details', {
// some-data
},() => {
if (socket) socket.close();
socket = io('http://localhost:4000', {forceNew: true});
socket.on('connect',() => {
console.log('connected');
});
socket.on('newLine', function (msg) {
// do-stuff
});
});
});
$('#closeBtn').click(function() {
socket.disconnect();
socket.close();
});
サーバー側
app.get('/details', (req, res) => {
const tail = spawn('ssh', ['[email protected]' + req.query.srv, req.query.script]);
io.on('connection', function (socket) {
console.log(`connect ${socket.id}`);
socket.on('disconnect',() => {
console.log(`DISconnected ${socket.id}`);
});
tail.stdout.on('data', function (data) {
socket.emit('newLine', {message: data});
});
});
return res.sendStatus(200);
});
Now]ボタンのクリックをシミュレートするとき、私はSOCを期待ケットと接続を閉じて、新しいものを作る。
サーバーのコンソールログ(私は一度だけボタンをクリックするたびに)
Server listening on localhost:4000
**click on detailsBtn**
GET /get/details?srv=myserver.google.com&script=%2Fusr%2Fbin%2Ftail 304 16.003 ms - -
connect YyYHFI9CARpBHaxoAAAB
**click on closeBtn**
DISconnected YyYHFI9CARpBHaxoAAAB
**click on detailsBtn**
GET /get/details?srv=myserver.google.com&script=%2Fusr%2Fbin%2Ftail 304 6.308 ms - -
connect vzfBnUPHUqYXd5qaAAAC
connect vzfBnUPHUqYXd5qaAAAC
**click on closeBtn**
DISconnected vzfBnUPHUqYXd5qaAAAC
DISconnected vzfBnUPHUqYXd5qaAAAC
**click on detailsBtn**
GET /get/details?srv=myserver.google.com&script=%2Fusr%2Fbin%2Ftail 304 4.677 ms - -
connect 3quEe5G1gFDJ2BvrAAAD
connect 3quEe5G1gFDJ2BvrAAAD
connect 3quEe5G1gFDJ2BvrAAAD
**click on closeBtn**
DISconnected 3quEe5G1gFDJ2BvrAAAD
DISconnected 3quEe5G1gFDJ2BvrAAAD
DISconnected 3quEe5G1gFDJ2BvrAAAD
は私が間違って何をしているのですか?
このような現象は、通常、重複イベントハンドラによって発生します。 – jfriend00