io.sockets.in 在 nativescript-socketio 中不工作

io.sockets.in not working in nativescript-socketio

我正在尝试使用 socketio 和 nodejs 在 nativescript 应用程序中构建私人聊天系统以实现实时聊天功能。

这是我用的插件https://github.com/triniwiz/nativescript-socketio/

作为群聊效果很好,但我想将其设为私密。所以我搜索并看到 io.sockets.in().emit 是我应该使用的而不是 io.emit()

这是我试过的

    var app = require('express')();
var http = require('http').createServer(app);
var io = require('socket.io')(http);
    io.on('connection', (socket) => {
      console.log('a user connected');
      socket.on('disconnect', () => {
        console.log('user disconnected');
      });
      socket.on('privatechatroom', function(data){
        socket.join(data.chatid, function () {
                io.sockets.in(data.chatid).emit('joined', { mes: 'Joined chat room' + data.chatid });
              socket.on('chat message', (data) => {
                console.log('message: ' + data.message);
                //io.emit('chat message', );
                io.sockets.in(data.chatid).emit('chat message', { message: data.message, type: data.type, date: data.date, sender: data.sender });
              });
              socket.on('typing', (msg) => {
                console.log('message: ' + msg);
                io.sockets.in(msg).emit('typing', msg);
              });
              socket.on('notTyping', (msg) => {
                console.log('message: ' + msg);
                io.sockets.in(msg).emit('noTyping', msg);
              });
        });
        });
    });

在浏览器上,它很适合私聊。但在我的 nativescript 应用程序上,它不起作用,除非我使用 io.emit() 而不是 io.sockets.in()

首先,你不能在 socket.join() 部分使用 socket.on(event...):

 socket.on('privatechatroom', function(data){
        socket.join(data.chatid, function () {
           socket.in(data.chatid).emit('joined', { mes: 'Joined chat room' + data.chatid });
        
      });
       socket.on('chat message', (data) => {
           console.log('message: ' + data.message);
           //io.emit('chat message', );
           socket.in(data.chatid).emit('chat message', { message: data.message, type: data.type, date: data.date, sender: data.sender });
         });
    socket.on('typing', (msg) => {
      console.log('message: ' + msg);
      socket.in(msg).emit('typing', msg);
    });
    socket.on('notTyping', (msg) => {
      console.log('message: ' + msg);
      socket.in(msg).emit('noTyping', msg);
    });
});

当您加入一个房间中的套接字客户端时,您必须将消息直接发送到该房间:

socket.to(chatid).emit('your event', {
         foo:"bar"
      });