NodeJs express.use 扰乱了 socket.io 引用

NodeJs express.use disturbs the socket.io reference

我是 nodejs 的新手 socket.io。 我只是想检测连接到快速服务器的套接字。 当我不使用快速服务器时,它对我来说工作正常。 然后出于某种原因,我使用了 express 并希望所有内容都是静态的,所以我将这一行添加到服务器文件中。

 app.use(express.static(__dirname));

上面一行扰乱了我的 client.html 文件。下面是我的 client.html 的代码。我使用开发人员控制台对其进行调试,发现包含“/socket.io/socket.io.js”的脚本 src 无效。

<html xmlns="http://www.w3.org/1999/xhtml">
<head>
<script src="/socket.io/socket.io.js"></script>

<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
<link rel="stylesheet" type="text/css" href="/css/style.css"/>
<title>Untitled Document</title>

<script>
var socket = io.connect();
socket.on('connect',function(){
    console.log("socket.io working");
});
</script>
</head>
</html>

我认为我缺少一些概念或东西。我已经尝试了很长时间,但可以找出问题所在。请指导。我自己试试。

更多信息:这是我的应用程序目录结构。


-MyChatRoom

--ChatServer.js

--html
----client.html

--css
----style.css
--images

--node_modules
----socket.io
----express

已编辑: 为了更好地理解这里是我的ChatServer.js代码

fs = require('fs');  
url = require('url');
express = require('express');
app = express();

server = require('http').createServer(app);
socketio = require('socket.io')(server);

//The root and all subs are made static
app.use(express.static(__dirname));

app.get('/',function(request,response){
    response.sendFile(__dirname + "/html/index.html");
});

app.listen(3000);

var connectedUsers = 0;

socketio.on('connection',function(socket){
    connectedUsers++;
    console.log('client connected');
});

app.listen(3000);

应该是

server.listen(3000);

您需要在 http 模块而不是 express 模块上收听。

Express 在您实例化时通过 http 模块传递。 Socket.io 使用 http 模块,这就是为什么你需要监听它才能正常工作。