Saya telah mengimplementasikan socket.io di server ekspres. Semuanya berfungsi, tetapi saya ingin menghindari skrip soket panjang di file utama saya. Dengan demikian saya telah membuat layanan terpisah untuk menangani logika soket di file lain:

Main.js: io.on("connect", SocketManager(io))

SocketManager.js: const SocketManager = (io) => {io.on("connect", ()=> do stuff}

Tetapi ketika melakukannya, saya hanya dapat menggunakan instance io. Socket tidak terdefinisi, yang sangat disayangkan mengingat saya harus mengaksesnya untuk mencapai tugas tertentu. Sayangnya, saya tidak bisa begitu saja meneruskan socket sebagai argumen kedua ke SocketManager. Bagaimana cara memperbaikinya?

0
DoneDeal0 11 April 2020, 21:42

1 menjawab

Jawaban Terbaik

Kode Anda mengabaikan socket yang diteruskan ke peristiwa connect sehingga Anda kehilangan kesempatan untuk menggunakan soket yang baru dibuat.

Untuk memperbaikinya, ubah ini:

 io.on("connect", SocketManager(io))

Untuk ini:

 SocketManager(io)

Yang ingin Anda lakukan adalah menginisialisasi pengelola soket Anda dan meneruskannya ke instance io dan membiarkannya mendengarkan peristiwa connect itu sendiri.

Kemudian, dalam kode SocketManager Anda, Anda ingin memperhatikan argumen socket yang diteruskan ke peristiwa connect. Jadi, ubah ini:

 const SocketManager = (io) => {io.on("connect", ()=> do stuff}

Untuk ini:

 const SocketManager = (io) => {
     io.on("connect", (socket) => { 
         // do stuff using newly connected socket in here
     });
 });
1
jfriend00 11 April 2020, 19:27