Node.js聊天
我最近设置了一个nodejs聊天服务器,聊天客户端由php服务器提供服务。 当用户登录时,他们的会话将存储在php服务器的mysql中,并且登录cookie将附加到浏览器。
我想限制只有登录用户才能聊天的用户。 实现这个目标的最佳实践是什么?
我的快速思想:
当聊天客户端加载时,如果用户登录,我会通过套接字将登录cookie信息发送到nodejs verver。 然后创建一个nodejs会话。 当用户聊天时,消息连同cookie信息将通过套接字发送到nodejs服务器。 如果cookie信息与nodejs会话不匹配,则消息将不会被广播,客户端套接字将被退出。
websocket是一个永久性的开放连接。 连接到WebSocket时,您只需要验证一次。
只需将您的登录cookie发送给node.js一次,然后通过引用套接字连接将其存储在服务器上。 然后只处理来自已认证用户的消息,并仅向经过认证的用户进行广播。
问题是客户端用户可以很容易地伪造这个cookie,因为节点不会与php通话以确保它是有效的登录cookie。
现在使用一个例子。
警告伪代码
// server.js
everyone.now.joinChat = function(cookie) {
chat.add(this, cookie);
}
everyone.now.serverMessage = function(message) {
if (chat.hasUser(this)) {
chat.broadcast(message);
}
}
chat = (function() {
var users = [];
return {
"add": function(client) {
users.push(client);
},
"hasUser": function(client) {
return users.some(function(user) {
return user === client;
});
},
"broadcast": function(message) {
users.each(function(user) {
user.clientMessage(message);
});
}
}
}());
// client.js
$(function() {
now.joinChat($.cookie("login"));
$("#send").click(function() {
now.serverMessage($(this).data("message"));
});
now.clientMessage = function(message) {
$("#messages").append($("<span></span>").text(message));
}
});
这是我正在寻找nodeJS的答案 - 如何使用express创建和读取会话
链接地址: http://www.djcxy.com/p/6481.html上一篇: Node.js chat
下一篇: Calling a computationally intensive routine from VBA without stalling Excel GUI