Socket.io-client: Library socket.io-client tidak kompatibel dengan Angular 6 terbaru

Dibuat pada 13 Mei 2018  ·  16Komentar  ·  Sumber: socketio/socket.io-client

Aku ingin:

  • [x] laporkan bug - dipecahkan, lihat dua baris terakhir untuk solusi

Library socket.io-client tidak kompatibel dengan Angular 6 terbaru. Ada kesalahan pada waktu eksekusi:

ReferenceError: global tidak didefinisikan di Object ../ node_modules / socket.io-client / node_modules / socket.io-parser / is-buffer.js (is-buffer.js: 4)

Silakan baca komentar di bawah untuk mengetahui lebih lanjut:
https://github.com/angular/angular-cli/issues/9827#issuecomment -369578814

Jika Anda ingin melihat kesalahan ini sendiri, tambahkan ke layanan sederhana aplikasi angular 6.0 seperti di bawah ini:

import { Injectable } from 'angular/core';
import * as socketIo from 'socket.io-client';

@Injectable()
export class SocketService {
    private socket;

    constructor() {}

    public initSocket(): void {
        this.socket = socketIo();
    }
}

Kesalahan menghilang saat Anda menghapus fungsi initSocket.



Oke, ada solusi di Angular 6 untuk bekerja dengan socket.io-client.
Tambahkan (window sebagai apapun) .global = window; ke polyfills.ts

bug

Komentar yang paling membantu

milik saya mulai bekerja hanya dengan menambahkan yang berikut ini

Di dalam polyfills.ts tambahkan:

(window as any).global = window;

sudut 6.1.0
socket.io-client 2.1.1

Ini terus berfungsi setelah meningkatkan ke sudut 7.1.x.

Semua 16 komentar

@darrachequesne Apakah mungkin untuk menambahkan perubahan ini ke garpu proyek sampai diselesaikan dengan benar?

@jessycormier apa yang Anda maksud dengan "garpu proyek"?

Efek samping pertama, tampaknya menghapus global di https://github.com/darrachequesne/has-binary/pull/4 merusak beberapa aplikasi Electron: https://github.com/darrachequesne/has-binary/issues/ 5 ...

Hai. Apakah ada kemajuan? Ada solusi? Ada solusi yang disarankan?

@realshaft - solusi di atas berhasil untuk saya di aplikasi web Ionic 4 / Angular 6

Oke, ada solusi di Angular 6 untuk bekerja dengan socket.io-client.
Tambahkan (window as any).global = window; ke polyfills.ts (terletak di folder src )

@realshaft terima kasih, ini berfungsi di angular6;)

halo @Setiap orang ,
tolong bantu saya.
jadi saya membuat layanan untuk menangani koneksi websocket saya dan memasukkannya ke dalam komponen.
koneksi ke soket baik-baik saja karena saya mendapatkan a user connected di konsol server.
tetapi ketika saya mencoba mengirim pesan dari komponen tidak ada yang dikirim.
ini file saya:
socketService.ts

 impor {Injectable} dari '@ angular / core';
 impor {Observable} dari 'rxjs / Observable';
 impor {Subject} dari 'rxjs / Subject';
 impor * sebagai io dari 'socket.io-client';

 @Infokat ({
 disediakan di: 'root'
 })
 kelas ekspor SocketService {

 url pribadi = 'http: // localhost: 3000';
 soket pribadi = io (this.url);

 // kirim pesan ke socket
 pesan (pesan) {
 // kirim pesan
 this.socket.emit ('chat', msg);
 }

 obrolan (pesan) {
 this.socket $ .emit ('chat', msg);

 // biarkan diamati
 }
 }

dan file komponen

 impor {Komponen, OnInit} dari '@ angular / core';
 impor {SocketService} dari '../../socket.service';

 @Komponen({
 pemilih: 'app-socket',
 templateUrl: './socket.component.html',
 styleUrls: ['./socket.component.scss']
 })
 kelas ekspor SocketComponent mengimplementasikan OnInit {

 konstruktor (
 soket pribadi: SocketService
 ) {}

 ngOnInit () {
 }

 Kirim() {
 const msg = 'halo';
 this.socket.message (msg);
 }

 }

ini koneksi server soket saya. saya menggunakan MVC

 const gameModel = membutuhkan ('../ models / game')
 const userModel = membutuhkan ('../ models / users')
 const wsModel = membutuhkan ('../ models / socket')
 const socket = membutuhkan ('socket.io')

 module.exports = (server) => {

 const io = soket (server);

 // Penangan WebSocket
 io.on ('koneksi', (soket) => {
 console.log ('pengguna terhubung')
 })

 // dapatkan pesan obrolan
 io.on ('chat', (msg) => {
 // io.emit ('res', json.stringify (msg))
 console.log (msg);
 })

 }

Terima kasih sebelumnya

di sini cara yang sedikit hack untuk membuatnya bekerja:
Unduh socket.io-client dari cdn Dan letakkan di folder src dengan nama socket.io-client.js

Di dalam main.ts tambahkan baris ini:

import * as io_ from './socket.io-client.js';
window['io'] = io_;

Di dalam polyfills.ts tambahkan:

(window as any).global = window;

Sekarang Anda dapat menggunakan panggilan socket.io-client menggunakan:

window['io']('localhost')

milik saya mulai bekerja hanya dengan menambahkan yang berikut ini

Di dalam polyfills.ts tambahkan:

(window as any).global = window;

sudut 6.1.0
socket.io-client 2.1.1

Ini terus berfungsi setelah meningkatkan ke sudut 7.1.x.

itu membantu saya, tapi mengapa?

@realshaft terima kasih, ini berfungsi di angular6;)

Itu berhasil untuk saya di Angular 7.x juga, terima kasih.

(window as any).global = window;
Ini bekerja untuk saya juga di Angular 7.

solusi yang sama bekerja dengan sudut 8

Tuhan tidak percaya saya mengatakan ini. Solusi yang sama disediakan @mjarkk . Bekerja di angular10! - Bagi saya, alasannya adalah server 2.x tidak berfungsi dengan klien 3.x!

Setelah 3 versi hack ini masih berfungsi lmao, saya yakin itu berfungsi sama di sudut 11.
Tetapi melihat masalah ini muncul lagi, saya sekarang hanya akan menyarankan untuk menggunakan javascript WebSockets asli karena didukung di semua browser utama, untuk tutorial memulai: https://javascript.info/websocket.

Apakah halaman ini membantu?
0 / 5 - 0 peringkat