我现在开始在这个Node.js的世界里,我做了几次测试,最初是典型的“Hello World”,直到创建一个简单的聊天,我已经开始创建一个更复杂,我在下面描述:
用户已经存在的聊天,它位于MySQL数据库中。
它应该创建多个聊天室,每个对话都是一对一的。
最初我做了Mysql连接测试,有效地实现了它,但在关闭连接时遇到了问题,所以我找到了另一个“解决方案”,它会询问是否建议这样做,否则它会很大错误。
使用卖家Socket.io聊天,在阅读我发现的与会话ID相关的文档时,您可以关联更多信息,我正在做的是以下内容:
我通过socket.join选项(房间)
使用socket.io的属性“set”,我通过对象存储与连接用户相关的信息,例如名称,数据库ID和图片的URL。
使用io.sockets.clients(room),让用户可以拥有多个会话(几个窗口/标签),让用户在房间内,所以验证客户端与用户一起id,只显示一个。
服务器:
var io = require("socket.io").listen(8080, {log: false});
io.on("connection", function(socket)
{
socket.on("newUser", function(data)
{
var participants = [];
var room = data.ig;
socket.set('iduser', data.d, function ()
{
socket.join(room);
for (var ver in pas = io.sockets.clients(room))
{
participants.push({id: pas[ver].store.data.iduser[0].id, n: pas[ver].store.data.iduser[0].n, f: pas[ver].store.data.iduser[0].f});
}
io.sockets.in(room).emit("newConnection", {participants: participants});
});
});
socket.on("disconnect", function()
{
var rooms = io.sockets.manager.roomClients[socket.id];
for(var room in rooms)
{
if(room.length > 0)
{
room = room.substr(1);
}
}
var idusuario = 0;
for(var ver in pas = io.sockets.clients(room))
{
if(pas[ver].id == socket.id)
{
idusuario = pas[ver].store.data.iduser[0].id;
break;
}
}
if(idusuario != 0)
{
//El número de veces que tiene una sesión...
var num = 0;
for(var ver in pas = io.sockets.clients(room))
{
if(pas[ver].store.data.iduser[0].id == idusuario)
{
num++;
}
}
if(num <= 1)
{
io.sockets.in(room).emit("userDisconnected", {id: idusuario, sender:"system"});
}
}
});
});
客户端
欣赏他们对如何应对这一困难的意见或建议。
提前感谢他们的帮助。