Saya seorang pemula ke socket.io, saya melakukan tutorial obrolan tentang dokumen dan "pekerjaan rumah" dari aplikasi obrolan untuk memahami cara kerjanya, sekarang saya mencoba menghubungkan server nodejs dan aplikasi reaksi dengan soket. . Saya telah menghabiskan sepanjang hari mencoba melakukan ini, tetapi saya mendapatkan kesalahan ini:

GET http://localhost:4000/?EIO=4&transport=polling&t=NYW26Ea 404 (Not Found)

Tujuan dari aplikasi saya adalah menampilkan pembaruan waktu, saya menggunakan soket untuk memperbarui waktu pada layar masing-masing satu detik. Ini file server.js , dan ya, itu cukup sederhana:

const express = require("express")
const http = require("http")
const socketIO = require("socket.io")
var cors = require('cors')

const PORT = 4000;
const routes = require("./routes/index")

const app = express()
app.use(cors())
app.use(routes)

const server = http.createServer(app)

const io = socketIO(server)

let interval

io.on("connection", (socket) => {
    console.log("New client connected!")
    if(interval) {
        clearInterval(interval)
    }
    interval = setInterval(() => getApiAndEmit(socket), 1000)
    socket.on("disconnect", () => {
        console.log("Client is disconnected")
        clearInterval(interval)
    })
})

const getApiAndEmit = socket => {
    const response = new Date()
    socket.emit("from-api", response)
}

app.listen(PORT, () => console.log(`Application up and running on ${PORT}`))

Jika saya mengunjungi rute yang saya buat dengan Express berfungsi dengan baik.

Dan di sini adalah app.js file:

import React, { useState, useEffect } from "react";
import socketIOClient from "socket.io-client";
const ENDPOINT = "http://127.0.0.1:4000";

function App() {
  const [response, setResponse] = useState("");

  useEffect(() => {
    const socket = socketIOClient(ENDPOINT);
    socket.on("from-api", data => {
      setResponse(data);
    });
  }, []);

  return (
    <p>
      It's <time dateTime={response}>{response}</time>
    </p>
  );
}

export default App;

Haruskah saya membuat rute untuk Socketio atau apa?

1
Bruno 5 April 2021, 06:28

1 menjawab

Dari pada:

app.listen(PORT, () => console.log(`Application up and running on ${PORT}`))

Gunakan ini:

server.listen(PORT, () => console.log(`Application up and running on ${PORT}`))

Alasan: Instance server yang Anda tetapkan untuk socketIO tidak sama dengan instance dari server yang Anda dengarkan.

Dengan Express Anda dapat melewati instance server seperti ini:

var express   = require('express');
var app       = express();
...
...
...
var server    = app.listen(PORT);
var io        = require('socket.io').listen(server);

io.sockets.on('connection', function (socket) {
  ...
});

Anda dapat merujuk ini: express.js - app.Listen vs server.Listen

1
Abhishek Pankar 5 April 2021, 07:23