我现在开始在这个 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"});
}
}
});
});
客户
感谢他们对如何处理这一困难的意见或建议。
提前感谢他们的帮助。