问题描述
这是我的服务器端:
const path = require('path');
const http = require('http');
const express = require('express');
const socketio = require('socket.io');
const app = express();
const server = http.createServer(app);
const io = socketio(server);
const port = 3000 || process.env.PORT;
app.listen(port,() => {
console.log(`server running on port ${port}`);
});
io.on('connection',socket => {
console.log(socket);
});
这是我的客户端:
<script src="/socket.io/socket.io.js"></script>
<script>
const socket = io();
</script>
</body>
</html>
我正确地重新安装了所有模块,但这没有帮助。
解决方法
问题是您要创建两个Web服务器,将socket.io附加到其中一个,但是只能启动另一个。
以下两行代码都创建了一个新的Web服务器:
const server = http.createServer(app);
app.listen(port,...);
但是,实际上只有第二个开始了,而这并不是您将socket.io绑定到的那个。因此,将socket.io绑定到的服务器永远不会启动,因此,应该与socket.io服务器进行通信的客户端程序都无法正常工作。
要解决此问题,请将您的服务器代码更改为此:
const path = require('path');
const express = require('express');
const socketio = require('socket.io');
const app = express();
const port = 3000 || process.env.PORT;
const server = app.listen(port,() => {
console.log(`server running on port ${port}`);
});
const io = socketio(server);
io.on('connection',socket => {
console.log(socket);
});
现在,您将只创建一台Web服务器,启动该服务器并将socket.io绑定到该服务器。