gpt4 book ai didi

javascript - Socket.io 在命名空间之间共享套接字数据

转载 作者:搜寻专家 更新时间:2023-10-31 22:43:15 25 4
gpt4 key购买 nike

我想知道如何共享在一个命名空间的套接字中设置的数据并在另一个命名空间访问它?

我完全知道我可以将数据附加到套接字对象本身。当我将数据附加到一个命名空间并尝试在另一个命名空间访问它时会出现问题。

下面演示问题

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

module.exports.init = function( server ) {

io = io.listen( server );

io.of( '/chatSystem' ).on( 'connection', function( socket ) {
/*handling set nickname event*/
socket.on( 'set.name', function( data ) {
/*attach nickname key to this socket*/
socket.nickname = data.name;
socket.broadcast.emit( 'user.entered', data );
});
});

io.of( '/chatUser').on( 'connection', function( socket ) {
/*handling client event socket.send*/
socket.on( 'message', function( data ) {
data = JSON.parse( data );
data.nickname = socket.nickname; // <--- this is undefined

/*send to all connected client( broadcast will not send message to socket that created the message)*/
socket.broadcast.send( JSON.stringify( data ) );
data.type = 'myMessage';

/*manually send back the message to the socket that created the message*/
socket.send( JSON.stringify( data) );
});
});
};

有办法解决这个问题吗?

最佳答案

这可能有点晚了,但我只是偶然发现了一个更简单的解决方案,并认为我会与 future 的调查人员分享。

在 socket > 1.0 中,您可以将共享数据存储在套接字的客户端对象中。它似乎仍然在套接字之间共享

使用你上面的例子

    /* attach nickname key to this socket */
socket.client.nickname = data.name;
/* In typescript with @types/socket.io */
socket.client["nickname"] = data.name;

并用于检索

    data.nickname = socket.client.nickname;
/* In typescript with @types/socket.io */
data.name = socket.client["nickname"];

希望这对某人有所帮助。我整个星期都在尝试寻找解决方案,但偶然发现了这个线程。一个小时后,我找到了这个替代方案。

关于javascript - Socket.io 在命名空间之间共享套接字数据,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/29824242/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com