Я пытаюсь реализовать простое соединение WebSocket с помощью Socket.io, Express и ReactJS.
Вот код сервера:
const express = require('express');
const socket = require('socket.io');
const path = require('path');
const app = express();
const port = 3030;
const server = app.listen(port, () => console.log(`App listening on port ${port}!`));
const io = socket(server);
io.on('connection', (socket) => {
console.log(socket.id);
socket.on('test', (data) => {
console.log(data);
})
})
app.get('/test', (req, res) => {
res.sendFile(
path.join(__dirname, 'public', 'index.html'),
err => err && res.status(500)
);
});
А теперь код компонента React:
import React from "react";
import io from 'socket.io-client';
const socket = io.connect('http://localhost:3030/test');
socket.emit('test', {
message: 'oh hi'
})
export const App = () => (
<p> Sample <p/>
);
Результат прост - я получаю console.log
с socket.id
(так что соединение работает), но я не получаю второе с data
. По какой-то неизвестной причине события emit
и on
работают неправильно. Я также пытался запустить emit
с функцией onClick
, переданной компоненту кнопки, но все равно ничего.
Есть идеи, что случилось?
РЕДАКТИРОВАТЬ:
Просто чтобы прояснить, on('disconnect')
также работает:
socket.on('disconnect', () => {
console.log('disconnected');
});