相关疑难解决方法(0)

如何在Client中获取socket.io客户端的会话ID

我想在socket.io客户端中获取客户端的会话ID.

这是我的socket.io客户端:

var socket = new io.Socket(config.host, {port: config.port, rememberTransport: false});
    // when connected, clear out display
    socket.on('connect',function() {
        console.log('dummy user connected');
    });
    socket.on('disconnect',function() {
        console.log('disconnected');
    });
    socket.connect();
    return socket;
Run Code Online (Sandbox Code Playgroud)

我想得到这个客户端的会话ID,我怎么能得到它?

javascript socket.io

44
推荐指数
5
解决办法
10万
查看次数

socket.io /连接上的参数

在我的node.js/Express.js应用程序中,我需要使用socket.io连接传递参数(在另一篇文章中看到).

在客户端,我有类似的东西:

编辑

var socket = io.connect('/image/change', {query:"name=my_img_name"});
var siofu = new SocketIOFileUpload(socket);

siofu.listenOnInput(document.getElementById("change_image_inpt"));
Run Code Online (Sandbox Code Playgroud)

在服务器端:

编辑

io.of('/image/change')
  .on('connection', function (socket) {
  console.log('log input param : ' + socket.handshake.query.name);
});
Run Code Online (Sandbox Code Playgroud)

但是在控制台中什么都没有

还有另一种方法可以实现吗?

EDIT2

这是客户端的完整代码:

$(document).ready(function() {

// icon_action_modal
$('.icon_actions').on('click', function() {
    // set icon preview
    $('#icon_action_modal_icon_preview').html('<img src="/upload/icon/' + $(this).data('icon') + '.png" />');

    // set icon to delete
    $('#icon_name').val($(this).data('icon'));

    // set Change icon socket
    var socket = io.connect('/icon_sets/change', {query:"name=my_img_name"});
    var siofu = new SocketIOFileUpload(socket);

    siofu.listenOnInput(document.getElementById("change_icon"));

    // Do something when a file is …
Run Code Online (Sandbox Code Playgroud)

javascript node.js express socket.io

14
推荐指数
3
解决办法
6万
查看次数

socket.io分配自定义socket.id

我会跟踪数组中连接的每个用户的列表.因此,如果有新的连接,它将检查用户是否已经在列表中,如果他已经在列表中,然后在列表中分配他们的socket.id和相应的socket.id,否则只需添加它们到列表.

这是为了防止同一用户在尝试进行多重登录时被算作2个用户.

Object.keys(client).forEach(function (key) {
    if (client[key].id == data.id){
        is_connected = true;
        socket.id = key;
    }
});
Run Code Online (Sandbox Code Playgroud)

处理尝试多次登录的用户发送/接收的消息/聊天时没有问题.

socket.on('chat', function(msg){
    var data = {"name": client[socket.id].name, "message": msg};
    io.emit('chat', data);
});
Run Code Online (Sandbox Code Playgroud)

聊天消息的io.emit成功发送给尝试多次登录的用户.

我得到的问题是每当用户决定退出/断开服务器时.

io.emit('user_leave', client[socket.id].id);
Run Code Online (Sandbox Code Playgroud)

[多登录案例] - >多用户和双用户是尝试多重登录的同一用户

每当主用户与服务器断开连接时,双用户就会收到服务器发送的'user_leave',因为io.emit应该将其发送到所有套接字.

但不是这样,当子用户与服务器断开连接时,主用户不会收到服务器发出的"user_leave".

*注意:主用户先登录,然后双用户登录.因此,主用户信息直接保存在阵列中,而子用户socket.id则分配了主用户套接字.id

[更新]

说明

B2 socket.id分配了B1 socket.id,io.emit用于聊天工作完美,而io.emit for disconnect只发送给All,除了双用户(B2)

javascript sockets node.js socket.io

6
推荐指数
2
解决办法
1万
查看次数

标签 统计

javascript ×3

socket.io ×3

node.js ×2

express ×1

sockets ×1