gpt4 book ai didi

Node.js 服务器端与 Socket.io 的连接

转载 作者:太空宇宙 更新时间:2023-11-03 23:43:03 25 4
gpt4 key购买 nike

我有一个带有前端应用程序和后端应用程序的 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() 并没有什么坏处,但没有必要;
  • 由于您没有在任何地方关闭套接字(.io)连接,因此它可能会始终保持打开状态;
  • 听起来更合适的做法是不为每个请求设置新的 socket.io 连接,而只在应用启动时设置一次并重复使用该连接;

关于Node.js 服务器端与 Socket.io 的连接,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/19263955/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com