簡體   English   中英

Node.js服務器端與Socket.io的連接

[英]Node.js server side connection to Socket.io

我有一個帶有前端應用程序和后端應用程序的Node.js應用程序,后端將管理列表並“推送”對前端應用程序的更新,對前端應用程序的調用將觸發列表更新,以便所有客戶端都收到正確的列表數據。

問題出在后端,當我按下按鈕時,我將執行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前綴; 本質上,您正在創建一個全局變量,當處理多個請求時,該變量可能會被覆蓋;
  • response.json()調用.end()本身; 自己再次調用response.end()並不麻煩,但這不是必須的;
  • 由於您沒有在任何地方關閉socket(.io)連接,因此它可能始終保持打開狀態;
  • 聽起來更合適的做法是不為每個請求建立新的socket.io連接,而只是在應用程序啟動時一次並重新使用它;

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM