Node.js服务器端到Socket.io的连接
我有一个Node.js应用程序,其中有一个前端应用程序和一个后端应用程序,后端将管理列表并“推送”到前端应用程序的更新,对前端应用程序的调用将触发列表更新,以便所有客户端接收正确的列表数据 问题是在后端,当我按下按钮时,我执行一个AJAX调用,该AJAX调用将执行以下代码(从中删除一些操作):Node.js服务器端到Socket.io的连接,node.js,express,socket.io,Node.js,Express,Socket.io,我有一个Node.js应用程序,其中有一个前端应用程序和一个后端应用程序,后端将管理列表并“推送”到前端应用程序的更新,对前端应用程序的调用将触发列表更新,以便所有客户端接收正确的列表数据 问题是在后端,当我按下按钮时,我执行一个AJAX调用,该AJAX调用将执行以下代码(从中删除一些操作): Lists.findOne({\u id:active\u settings.active\u id},函数(错误,Lists\u结果){ var song_list=新数组(); 对于(i=0;i
Lists.findOne({\u id:active\u settings.active\u id},函数(错误,Lists\u结果){
var song_list=新数组();
对于(i=0;i
但是response.end似乎永远不起作用,调用一直挂起,而且列表并不总是刷新,因此socket.emit代码存在问题。我想socket连接保持打开状态是因为响应没有结束
我以前从未使用过此服务器端,因此非常感谢您的帮助。(活动的\u设置等存在)我看到一些可能会或可能不会导致您出现问题的问题:
的作用域不正确,因为您没有在其前面加上list
;实际上,您正在创建一个全局变量,当处理多个请求时,该变量可能会被覆盖var
response.json()
- 由于您没有在任何地方关闭套接字(.io)连接,因此它可能始终保持打开状态
- 听起来更合适的做法是不要为每个请求设置一个新的
连接,而是在应用程序启动时只设置一次,然后重新使用socket.io
connect
处理程序中),请尝试socket.disconnect()
,我现在将其修改为:socket.on('connect',function(){console.log('connected');socket.emit('update_list',{key:config.socket_key});socket.disconnect();});socket.on('disconnect',function(){console.log('disconnecting');response.end();});response.end();当我第一次执行控制台输出时:connected,disconnecting,但response.end()仍然不起作用(列表的var范围也已固定)当我再次按下时(即使在刷新等之后)它不再发送已连接/断开连接的消息。我的呼叫一直在执行,2分钟后它会收到200OK@romenov我认为您不应该在套接字的disconnect
处理程序中结束响应;另外,请尝试删除socket.io部分,看看这是否解决了您的响应问题出于某种原因,response.json..我删除了它,只使用了response.end(),现在响应问题已经解决..但是套接字部分仍然是持久的
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();
}
});
});