#javascript #reactjs #socket.io
#javascript #reactjs #socket.io
Вопрос:
Как мне использовать сокет.ввод-вывод с помощью React? У меня есть этот код для моего клиента:
import React, { Component } from "react"
import io from "socket.io-client"
import "./App.css"
const socket = io()
console.log(socket)
class App extends Component {
render() {
return (
// ...
)
}
}
export default App
И для моего сервера:
const express = require("express"),
app = express(),
http = require("http").Server(app),
io = require("socket.io")(http)
io.on("connection", socket => {
console.log("New connection")
})
http.listen(8000, () => {
console.log("Started!")
})
Но я продолжаю получать эту ошибку:
POST http://localhost:3000/socket.io/?EIO=3amp;transport=pollingamp;t=MdZyD8L 404 (Not Found)
Что я сделал не так? Спасибо.
PS: Для запуска приложения я делаю npm run start
, а для сервера node server/server.js
Комментарии:
1. Изменение на клиенте
const socket = io('http://localhost:8000'); console.log(socket);
Ответ №1:
на самом деле я не запускал код; но вы заметили, что порт в ошибке — 3000, а не 8000, который вы инициализировали на сервере для прослушивания?
чтение https://socket.io/docs/client-api /, в нем говорится, что по умолчанию используется расположение окна, зная react, вы, вероятно, работаете на порту 3000, который является тем же самым 3000 в ошибке
попробуйте установить порт при инициализации объекта сокета
const socket = io("localhost:8000");
Комментарии:
1. Также. убедитесь, что не вводите жесткий код в localhost: 8000 при его развертывании (если делаете это). У меня было это, и я развернул свое приложение на heroku.. Затем я обнаружил, что к моему серверу не было подключений… потому что я жестко запрограммировал его на localhost от клиента… если вы просто выполните io(), он «автоматически подключится к местоположению окна» socket.io/docs/client-api
Ответ №2:
Ниже приведен код для подключения через сокет, если вы хотите, чтобы после рендеринга страницы ваш сокет подключился, а затем запишите его в componentDidMount.
import React, { Component } from "react"
import io from "socket.io-client"
import "./App.css";
class App extends Component {
componentDidMount(){
let socket = io.connect("http://localhost:8000");
console.log(socket)
}
render() {
return (
// ...
)
}
}
export default App
Например, вы можете перейти по ссылке:
https://medium.freecodecamp.org/how-to-create-a-realtime-app-using-socket-io-react-node-mongodb-a10c4a1ab676