【发布时间】:2018-03-09 18:10:42
【问题描述】:
我是 nodejs 的新手,所以可能这个问题听起来很奇怪,但我需要的是我想创建一个聊天应用程序,让用户登录,然后他们可以一对一或一对多聊天,但问题是如果用户刷新浏览器那么我如何维护我在服务器端维护的用户列表的套接字 ID 这是我使用的代码
服务器端
var app = require('express')();
var fs = require('fs');
var forceSsl = require('express-force-ssl');
app.use(forceSsl);
var options = {
key: fs.readFileSync('server.key'),
cert: fs.readFileSync('server.crt')
};
var server = require('https').createServer(options, app).listen(3000,function(){
console.log("Https server started on port 3000");
});
var io = require('socket.io').listen(server);
var sockets = {};
var users = {};
io.on('connection', function(socket)
{
console.log("Hi i am connected");
// Emit the connected users when a new socket connects
for (var i in sockets)
{
socket.emit('user.add', { username: sockets[i].username, id: sockets[i].id });
}
// Add a new user
socket.on('username.create', function (data)
{
socket.username = data;
sockets[socket.id] = socket;
users[data] = socket.id;
io.emit('user.add',{ username: socket.username, id: socket.id });
});
// Send the hug event to only the socket specified
socket.on('pm', function (data)
{
io.to(users[data.username]).emit('message', data.message);
});
// Remove disconnected users
socket.on('disconnect', function ()
{
delete sockets[socket.id]; io.emit('user.remove', socket.id);
});
});
客户端
socket.emit('username.create', results.email);
socket.on("message", function(data) {
//here i want to display message who send to this user
});
$(document).on('click','#gotou',function()
{
var sendto = $("#msgto").val();
socket.emit("pm", {"username":sendto,"message":"Testing from "+checkusername});
});
【问题讨论】:
-
你可以将你的socket id存储在
node js的Session中。 -
刷新页面后是否有效?