gpt4 book ai didi

angularjs - Passport.socketio 和客户端仅在重新启动服务器时连接/重新连接

转载 作者:太空宇宙 更新时间:2023-11-04 02:22:51 25 4
gpt4 key购买 nike

我有一个实时应用程序,可以与express+passportJS一起正常工作,并且无需套接字身份验证。当我添加passport.socketio时,我的问题是套接字仅在我重新启动服务器时才会连接...

我在服务器上有 Passportjs & Passport.socketio,在客户端我有 AngularJS btford.socket-io :

angular.module('Socket', ['btford.socket-io'])

.factory('socket',['socketFactory', function(socketFactory){
var myIoSocket = io.connect("http://192.168.0.7:8080");

mySocket = socketFactory({
ioSocket: myIoSocket
});

return mySocket;
}]);

当用户登录时,我正在执行socket.connect();。这似乎没有在服务器端执行任何操作,我没有看到任何日志...

这是按照教程实现的 Passport.socketio

var io = require('socket.io').listen(app.listen(port));
var passportSocketIo = require("passport.socketio");

io.use(passportSocketIo.authorize({
cookieParser: cookieParser,
secret: 'secret',
store: sessionStore,
success: onAuthorizeSuccess,
fail: onAuthorizeFail,
}));

function onAuthorizeSuccess(data, accept){
log.debug('successful connection to socket.io');
return accept();
}

function onAuthorizeFail(data, message, error, accept){
log.debug('unsuccessful connection to socket.io');
if(error){
throw new Error(message);
}

return accept(new Error(message));
}

奇怪的是,当我重新启动服务器时,我可以看到很多日志消息,显示我尝试连接的所有套接字现在实际上已连接

然后它似乎让用户通过套接字进行交换并按预期工作。

有人知道会发生什么吗?

最佳答案

当客户端打开页面时,客户端将进行连接,然后初始化握手。然后服务器检查身份验证并强制断开连接。然后服务器不会检查同一套接字连接的身份验证(不初始化握手)。您必须强制从客户端建立新连接。

socket = io.connect(SOCKET_URL, {forceNew: true});

你的代码

var myIoSocket = io.connect("http://192.168.0.7:8080",{forceNew: true});

我也遇到了同样的问题,这解决了我的问题。如果你强制建立一个新连接,我希望它之前的所有事件监听器都会丢失。您必须再次添加事件监听器。

关于angularjs - Passport.socketio 和客户端仅在重新启动服务器时连接/重新连接,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/32219793/

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