【问题标题】:Websockets & NodeJS - Changing Browser Tabs & SessionsWebsockets 和 NodeJS - 更改浏览器选项卡和会话
【发布时间】:2017-10-05 08:05:52
【问题描述】:

我已经开始使用 socket.io 编写 node.js websocket 解决方案。

浏览器成功连接到节点服务器,我看到了 socket.id 以及与 console.log(socket) 关联的所有配置。我还通过初始连接传回了一个用户 ID,并且可以在服务器端看到它。

问题:我不确定将用户与连接关联的最佳方式。我可以看到 socket.id 更改每个页面更改以及打开选项卡时。如何跟踪用户并向所有必需的套接字发送“消息”。 (可以是一页,也可以是 3 个标签等)。

我试图查看“express-socket.io-session”,但我不确定如何为它和这种情况编写代码。

问题:我在下面有 'io' 和 'app' 变量。 2个可以一起用吗? app.use(io);

基本上我希望能够跟踪用户(我猜是按会话进行的 - 但不确定如何处理选项卡等的不同套接字 ID)并知道如何回复用户或一个或多个套接字。

谢谢

【问题讨论】:

  • 这取决于你如何验证你的用户,例如,如果每个套接字都包含一个带有用户凭据的令牌,你可以通过这个令牌跟踪用户。因此,如果您想向特定用户发送消息,请搜索您的连接以找到具有相同用户令牌的这些。

标签: node.js express socket.io


【解决方案1】:

处理这种情况的最佳方法是依靠 SocketIO 的房间。以用户的唯一 ID 命名房间。这将支持开箱即用的多个连接。然后,每当您需要与特定用户通信时,只需调用消息函数并传入他们的 id、事件和任何相关数据。您无需担心显式离开房间,只要他们的会话超时或关闭浏览器选项卡,SocketIO 就会为您执行此操作。 (很明显,每当他们注销时,我们都会明确地离开房间)


在服务器上:

var express = require('express');
var socketio = require('socket.io');

var app = express();
var server = http.createServer(app);
var io = socketio(server);

io.on('connect', function (socket) {
  socket.on('userConnected', socket.join);  // Client sends userId
  socket.on('userDisconnected', socket.leave);  // Cliend sends userId
});

// Export this function to be used throughout the server
function message (userId, event, data) {
  io.sockets.to(userId).emit(event, data);
}

在客户端:

var socket = io('http://localhost:9000');  // Server endpoint

socket.on('connect', connectUser);

socket.on('message', function (data) {
  console.log(data);
});

// Call whenever a user logs in or is already authenticated
function connectUser () {
  var userId = ...  // Retrieve userId somehow
  if (!userId) return;
  socket.emit('userConnected', userId);
}

// Call whenever a user disconnects
function disconnectUser () {
  var userId = ...  // Retrieve userId somehow
  if (!userId) return;
  socket.emit('userDisconnected', userId);
}

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-02-19
    • 1970-01-01
    • 2013-11-03
    • 2019-01-17
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多