Socket.io不希望使用socket.to('<roomId>')。emit('message')发送给发送者

时间:2019-06-20 09:23:43

标签: reactjs sockets websocket socket.io

我是所有Web套接字主题的新手,所以请为我谅解。

我正在尝试从服务器向房间中除ME以外的所有人发送消息。我是发件人,所以我应该收到这些消息。

但是无论如何,Socket.io仍在向我发送这些消息。 我做了所有参考文档的工作。

查看我的代码:
服务器:

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

 // Sever is an instance of express.js server comming from outside
 const ioInstance = io(server);

  ioInstance.on('connection', socket => {
    const {
      request: { user }
    } = socket;
    const userExist = user || false;

    if (!userExist) {
      return;
    }

    socket.on('joinRoom', room => {
      socket.join(room);
    });

    socket.on('leavingRoom', listId => {
      socket.leave(`list-${listId}`);
    });


    updateItemState(socket);
  });
 };

const updateItemState = socket => {
  socket.on('item-busy', data => {
    const { listId } = data;

    console.log('item is busy');
    console.log(data);
    socket.to(`list-${listId}`).emit('item-busy', data);
  });
};

客户端:

ItemComponent.jsx

import io from 'socket.io-client';

 handleSocketConnection = () => {
    const {
      match: {
        params: { id: listId }
      }
    } = this.props;

    if (!this.socket) {
      this.socket = io();
    }

    this.socket = io();
    this.socket.on('connect', () =>
      this.socket.emit('joinRoom', `list-${listId}`)
    );

    this.socket.on('item-busy', data => {
      const { itemId, listId } = data;

      console.log('this item is busy');
    });
  };

现在,我要在两个浏览器实例上启动我的应用程序。我的左侧是Chrome Canary,我正在发出“繁忙”事件的任何常规Chrome。 我希望仅在Chrome Canary实例上获得console.log,而在常规Chrome上不能。

但是我在两个浏览器上都得到了这些日志。 我做错了什么?

0 个答案:

没有答案