Socket.io не будет распространять / испускать строку - PullRequest
0 голосов
/ 04 апреля 2019

Я следую этому уроку:

https://codingblast.com/chat-application-angular-socket-io/

Все работает до последнего шага, Общение с другими пользователями .

Это мой index.js:

let express = require('express')
let app = express();

let http = require('http');
let server = http.Server(app);

let socketIO = require('socket.io');
let io = socketIO(server);

const port = process.env.PORT || 3000;

io.on('connection', (socket) => {
    console.log('user connected');
    socket.on('new-message', (message) => {
        console.log(message);
        io.emit(message);
    });
});

server.listen(port, () => {
    console.log(`started on port: ${port}`);
});

Я оставил console.log там с целью проверить, поступают ли сообщения до сих пор.

Тогда это мой app.component.ts:

import { Component } from '@angular/core';
import { ChatService } from '../chat.service';

@Component({
  selector: 'app-root',
  templateUrl: './app.component.html',
  styleUrls: ['./app.component.css']
})
export class AppComponent {
  message: string;
  messages: string[] = [];

  constructor(private chatService: ChatService) {
  }

  sendMessage() {
    this.chatService.sendMessage(this.message);
    this.message = '';
  }

  ngOnInit() {
    console.log('Starting...');
    this.chatService
        .getMessages()
        .subscribe((message: string) => {
          console.log('message sent');
          this.messages.push(message);
        });
  }
}

Я получаю console.log('Starting...');, но он никогда не достигает части console.log('message sent'); в консоли.

Вот и chat.service.ts:

import * as io from 'socket.io-client';
import { Observable } from 'rxjs';

export class ChatService {
    private url = 'http://localhost:3000';
    private socket;

    constructor() {
        this.socket = io(this.url);
    }

    public sendMessage(message) {
        this.socket.emit('new-message', message);
    }

    public getMessages = () => {
        return Observable.create((observer) => {
            this.socket.on('new-message', (message) => {
                observer.next(message);
            });
        });
    }
}

Я не вижу здесь ничего плохого. Любая помощь будет оценена.

1 Ответ

1 голос
/ 04 апреля 2019

То, что идет не так, это ваш io.emit на вашем сервере. Вы только передаете сообщение, но первым параметром io.emit является событие. Просто добавьте 'new-message' в качестве первого параметра, и сообщения будут поступать на ваш клиент socket.on('new-message', ...

socket.on('new-message', (message) => {
    console.log(message);
    io.emit('new-message', message);
});
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...