尝试通过身份验证的用户向登录用户发送消息时出现的问题

时间:2018-09-05 06:53:04

标签: node.js socket.io

我正在使用node.js,ejs和socket.io。 Mysql用于数据库。

我要实现什么目标?

假设有2个用户并且用户2已经登录。当用户1登录时,它将通知用户2用户1已登录。

到目前为止,我尝试了什么?

下面是jquery ajax的成功回调,用于验证数据库中的用户。

success: function(result) {
    //Connnecting with socket.
    var clientSocket = io().connect("http://localhost:1235?Token=" + result.Data.Token);
    //Once connected, emit the message in success callback that User 1 is logged in.
    //Then redirecting the user to profile page in the success callback of emit.
    clientSocket.on("connect", function() {
        clientSocket.emit("Profile", { "Message": "User is online." }, function(receipt) {
            if(receipt) {
                location.href = "/profile";
            }
        });
    });
}

到目前为止,一切都很好。

下面是服务器端代码。

var socket_io = socket(server);

socket_io.on("connection", function(socketParam) {
    console.log("Connected");
    //Send Message to all users once the user is authenticated as requested in above ejs 
    socketParam.on("Profile", function(data, profileCallback) {
        profileCallback(true);
        console.log(data);
        socket_io.emit("Profile", data);
    });
});

问题现在从下面的代码开始。个人资料页面中显示以下代码,一旦用户通过身份验证并重定向到该页面,该页面就会出现。

var userData = JSON.parse(localStorage.getItem("User_Data"));

clientSocket = io().connect("http://localhost:1235?Token=" + userData.Token);
clientSocket.on("connect", function() {
    clientSocket.on("Profile", function(data) {
        debugger;       
    });
});

在上面的代码(profile.ejs)中,这里的问题是,当我到达配置文件页面时,正在重新建立连接。这会断开用户的连接并重新连接,我认为由于这个原因,从服务器发出的Profile事件中的数据永远无法到达。

问题 有什么方法可以维护在客户端建立的连接,而无需重新建立连接?

如果需要更多信息,请告诉我。

0 个答案:

没有答案