Node.js服务器端连接到Socket.io

我有一个前端应用程序和后端应用程序的Node.js应用程序,后端将pipe理列表,并将更新推送到前端应用程序,调用前端应用程序将触发列表更新,以便所有客户端接收正确的列表数据。

问题是在后端,当我按下button时,我执行一个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等存在)

我看到一些可能导致或可能不会导致问题的问题:

  • list没有正确的作用域,因为你不用var前缀; 基本上,你正在创build一个全局variables,当有多个请求被处理的时候,这个全局variables可能会被覆盖。
  • response.json()调用.end()本身; 自己再次调用response.end()并没有什么不好,
  • 由于你没有closures任何地方的套接字(.io)连接,它可能会一直保持打开状态;
  • 听起来更合适一点,不要为每个请求设置一个新的socket.io连接,而只是在应用程序启动时重新使用它。