1
我有一個Node.js應用程序與一個前端應用程序和後端應用程序,後端將管理列表和「推」更新到前端應用程序,調用前端應用程序將觸發列表更新,以便所有客戶端都能收到正確的列表數據。Node.js服務器端連接到Socket.io
的問題是在後端側,當我按下按鈕,我執行AJAX調用,而AJAX調用將執行以下代碼(修剪出來的一些操作):
Lists.findOne({_id: active_settings.active_id}, function(error, lists_result) {
var song_list = new Array();
for (i=0; i < lists_result.songs.length; i++) {
song_list.push(lists_result.songs[i].ref);
}
Song.find({
'_id': {$in: song_list}
}, function(error, songs){
// DO STUFF WITH THE SONGS
// UPDATE SETTINGS (code trimmed)
active_settings.save(function(error, updated_settings) {
list = {
settings: updated_settings,
};
var io = require('socket.io-client');
var socket = io.connect(config.app_url);
socket.on('connect', function() {
socket.emit('update_list', {key: config.socket_key});
});
response.json({
status: true,
list: list
});
response.end();
}
});
});
然而response.end似乎永遠不會工作,通話不斷,更進一步,列表並不總是刷新,所以有一個與socket.emit代碼的問題。並且套接字連接保持打開我假設因爲響應沒有結束?
我從來沒有做過這個服務器端之前,所以任何幫助將不勝感激。 (該active_settings等存在)
如何關閉該連接?該呼叫將只發生一次,每4-5分鐘一次,只有一個人執行,因此新連接沒問題我認爲 – romenov
@romenov在發出消息(在連接處理程序中)嘗試'socket.disconnect()' – robertklep
我現在將其修改爲: socket.on('connect',function(){ console.log('connected'); socket.emit('update_list',{key:config.socket_key}); socket .disconnect(); }); ('disconnect',function(){ console.log('disconnected'); response.end(); }); response.end(); 當我執行第一次控制檯輸出:連接,斷開連接,但response.end()仍然不工作(列表的var範圍也已被修復)當我再次按下時(即使在刷新之後),它沒有給出連接/斷開連接的消息了。而我的電話繼續執行,2分鐘後它得到一個200 OK – romenov