Socket.io广播到房间不工作

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Socket.io广播到房间不工作相关的知识,希望对你有一定的参考价值。

在使用"socket.io": "^2.0.4"的node.js应用程序中

Socket.io初始化如下:

export let io: any;

 io = socketio(server,
    {
      secure: secure,
      rejectUnauthorized: false,
    },
  );

  io.set('origins', '*:*');
  io.origins('*:*');

  io.on('connection', (socket) => {
  socket.on('message', async (data) => {
    }
  }

我想将message广播到房间里的所有插座

所以我做了 :

io.to(roomName).emit('message', data);

我记录了io()。to()。emit()后没有发出roomName和数据的问题

但是没有事件在message传递,我错过了什么?

答案

您的sockect.IO是否在服务器端正确配置,这是一个基于rxjs for Angular的低级套接字服务api,可以使用,你可以使用

import { Injectable } from '@angular/core';
import * as socketio from 'socket.io-client';
import {environment} from '../../../environments/environment';
import {Observable} from 'rxjs/Observable';
import {BehaviorSubject} from 'rxjs/BehaviorSubject';

@Injectable()
export class SocketService {

  private socket: SocketIOClient.Socket;
  connected$ = new BehaviorSubject<boolean>(false);

  constructor() {
    this.socket = socketio(environment.socket.baseUrl, environment.socket.config);
    this.socket.on('connect', () => this.connected$.next(true));
    this.socket.on('disconnect', () => this.connected$.next(false));
  }

  join(room: string) {
    // auto rejoin after reconnect mechanism
    this.connected$.subscribe(connected => {
      if (connected) {
        this.socket.emit('join', {room});
      }
    });
  }

  disconnect() {
    this.socket.disconnect();
    this.connected$.next(false);
  }

  emit(event: string, data?: any) {

    console.group();
      console.log('----- SOCKET OUTBAND -----');
      console.log('Action: ', event);
      console.log('Payload: ', data);
    console.groupEnd();

    this.socket.emit(event, data);
  }

  listen(event: string): Observable<any> {
    return new Observable( observer => {

      this.socket.on(event, data => {

        console.group();
          console.log('----- SOCKET INBOUND -----');
          console.log('Action: ', event);
          console.log('Payload: ', data);
        console.groupEnd();

        observer.next(data);
      });
      // dispose of the event listener when unsubscribed
      return () => this.socket.off(event);
    });
  }

}

这段代码来自Avatsaev,感谢他与NGRX一起使用socket Io分享他的酷应用程序,你可以看看它与his service code的搭配方式

另一答案

请尝试以下代码:

socket.broadcast.to(roomName).emit('message', data);

更多信息:https://socket.io/docs/emit-cheatsheet/#

以上是关于Socket.io广播到房间不工作的主要内容,如果未能解决你的问题,请参考以下文章

socket io 广播、房间和确认功能

socket io 广播、房间和确认功能

socket.io 只向房间 A 和 B 中的用户广播

带有 Socket.io 和 Node 的动态房间

使用Socket.io将消息发送到多个房间?

如何使用nodejs socket.io向特定房间中的用户发送打字警报和消息