【问题标题】:How can I establish one connection between a user and the WebSocket?如何在用户和 WebSocket 之间建立一个连接?
【发布时间】:2015-12-10 22:38:05
【问题描述】:

我在节点/Express 服务器上运行 websocket。

我需要在 websocket 和客户端之间发送json 字符串和第四个字符串。

但是,如果用户打开多个浏览器的选项卡,我希望 websocket 服务器知道这是同一用户已连接。

这里是逻辑执行顺序

  1. 用户连接到 WebSocket。
  2. 用户向WebSocket发送json字符串。
  3. WebSocket 对收到的消息进行处理。
  4. WebSocket 最终将新消息发送到用户打开的所有选项卡

新消息应该只返回给该用户而不是其他用户。

如何在用户和 WebSocket 之间建立一个连接?

这是我的服务器设置

var env = require('./config');

var app = require('express')();
var server = require('http').Server(app);

var io = require('socket.io')(server);
var clients = [];

server.listen(env.socket.port, env.socket.host, function () {
  var host = server.address().address;
  var port = server.address().port;

  console.log('Websocket running at http://%s:%s', host, port);
});

app.get('/', function (req, res) {
    res.send('Welcome!');
});

io.on('connection', function (socket) {

    clients[] = socket;

    socket.emit('chat', { hello: 'world' });

    socket.on('chat', function(msg){
        console.log('message: ' + msg);
        sendAll(msg);
    });

});

function sendAll (message) {
    for (var i=0; i< clients.length; i++) {
        clients[i].send("Message For All: " + message);
    }
}

【问题讨论】:

  • 那是因为。如何向属于 1 个用户的每个选项卡发送消息?
  • 使用会话客户端将由 sessionid clients = {session1: [socket]}; clients['session1'].push(newTabSocket) 键入
  • 我有一个可以使用的PHPSESSID cookie。但是,我如何读取 io.on('connection', function(socket){.... 中的 cookie 值
  • 再次感谢您。但这并不能让我访问 PHPSESSID cookie。

标签: javascript json node.js websocket socket.io


【解决方案1】:

如果您没有对用户进行身份验证,那么您需要一些特定于浏览器的数据来关联您后端的用户。

我不知道 cookie(没有使用过它们),但 JavaScript 级别的一种方法是存储本地生成的随机 ID(足够长,这样您就不必担心冲突)在浏览器的本地存储中,并将其作为初始消息的一部分在 WebSocket 级别传输。

【讨论】:

    猜你喜欢
    • 2014-08-23
    • 1970-01-01
    • 1970-01-01
    • 2019-12-14
    • 1970-01-01
    • 1970-01-01
    • 2021-05-29
    • 2020-04-25
    • 1970-01-01
    相关资源
    最近更新 更多