@Proger1
Full Stack web developer PHP Laravel Angular...

Cобытия не прослушиваются в связи socket.io и socket.io-client, Nodejs, Angular?

Всем привет. Код, который я написал - Сервер server.js
const app = require('express');
const server = require('http').createServer(app);
const io = require('socket.io')(server);
const Redis = require('ioredis');
const redis = new Redis();

// Не дает реакции
io.on('connection', () => {
   console.log('New connection event');
});

// Redis прослушивает событие из Laravel, работает нормально
redis.subscribe('onlineschool_database_chat-new-message');
redis.on('message', function(channel, message){
    message = JSON.parse(message);
    // дело доходит что нужно эмитить это в клиент, нечего неработает и on connected тоже
    io.emit('newmessageevent', message.data.message);
});

// РАБОТАЕТ
server.listen(3200, function(){
   console.log('Listening 3200');
});


И вот на стороне клиента (Angular 11)

Service

import { Injectable } from '@angular/core';
import * as io from 'socket.io-client';
// import Echo from 'laravel-echo';

import {Observable} from "rxjs";
import {GlobalConstants} from "../../classes/Auth/global-constants";

@Injectable({
  providedIn: 'root'
})
export class WebSocketService {
  public socket: any;
// http://127.0.0.1:3200, ws://127.0.0.1:3200, 127.0.0.1:3200
// пробовал разными способами
  public readonly web_socket_url: string = GlobalConstants.WEBSOCKET_URL;

  constructor() {

    const options = {
      rememberUpgrade:true,
      transports: ['websocket'],
      secure:true,
      rejectUnauthorized: false,
      reconnect: true
    }

    this.socket = io(this.web_socket_url, options);
  }

  listen(eventName: string) {
    console.log('connect');
    return new Observable((subscriber) => {
      this.socket.on(eventName, (data: any) => {

        subscriber.next(data);
      })
    })
  }


Вызов в app.component
this.WebSocket.listen('connect').subscribe((data) => {
    console.log(data);
  },
  error => console.log(error)
)

this.WebSocket.listen('disconnect').subscribe((data) => {
    console.log('Socket disconnect - ' + data);
  },
  error => console.log('Socket disconnect')
)

this.WebSocket.listen('newmessageevent').subscribe((data) => {
    console.log(data);
  },
  error => console.log(error)
)


И вот в чем проблема, работает только disconnect event в ангуляре когда я выключаю скрипт node, все остальные emit, on, разные евенты, клиекн не видит, такое ощущение что on, emit вообще нечего не делают, может кто знает?)
  • Вопрос задан
  • 27 просмотров
Пригласить эксперта
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Войти через центр авторизации
Похожие вопросы