我正在使用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事件中的数据永远无法到达。
问题 有什么方法可以维护在客户端建立的连接,而无需重新建立连接?
如果需要更多信息,请告诉我。