我是nodejs和socket.io的新手。 我只是打算检测连接到快速服务器的套接字。 当我不使用快速服务器时,它对我来说很好。 然后由于某种原因我使用了express并希望一切都是静态的,所以我将这一行添加到服务器文件中。
app.use(express.static(__dirname));
以上行扰乱了我的client.html文件。以下是我的client.html的代码。我使用开发者控制台调试它,发现脚本src包含" /socket.io/socket.io.js"无效。
<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');
});
答案 0 :(得分:1)
app.listen(3000);
应该是
server.listen(3000);
您需要收听http模块,而不是快速模块。
实例化时,Express会通过http模块传递。 Socket.io使用http模块,这就是你需要监听它才能使它工作的原因。