此问题先前已被提出,但在之前的回复中未找到任何解决方案。
Socket.IO给了我两个问题:
现在客户端似乎没有根据脚本行找到socket.io.js文件 -
我理解使用Chrome开发人员工具控制台找不到文件,该控制台在文件上有404错误。
我读到这个文件是由服务器即时创建的。但我在根文件夹上做了'ls-a'。找不到socket.io/socket.io.js文件。
有什么想法吗?
这里的参考是我的服务器代码 -
var http = require('http'),
path = require("path"),
url = require("url"),
fs = require("fs"),
mime = require("mime"),
io = require("socket.io").listen(server);
var homepath = ".";
var server = http.createServer(function (req, res) {
var uri = url.parse(req.url).pathname;
var filepath = path.join(homepath, uri);
console.log(filepath);
path.exists(filepath, function (exists) {
if (!exists) {
//404 response
res.writeHead(404, {
"Content-Type": "text/plain"
});
res.write("404 File not Found \n");
res.end();
} else {
if (fs.statSync(filepath).isDirectory()) {
filepath += '/index.html';
filepath = path.normalize(filepath);
}
fs.readFile(filepath, "binary", function (err, data) {
if (err) {
res.writeHead(500, {
'Content-Type': 'text/plain'
});
res.write('500 File read error \n');
res.end();
} else {
var contentType = mime.lookup(filepath);
res.writeHead(200, {
'Content-Type': contentType
});
res.write(data, 'binary');
res.end();
}
});
}
});
//sockets part starts here
io.sockets.on('connection', function (socket) {
socket.on('test', function (data) {
console.log('i got something');
console.log(data.print);
});
});
});
server.listen(3000);
server.on('error', function (e) {
console.log(e);
});
console.log('Server listening on Port 3000');
答案 0 :(得分:5)
这里的问题是你告诉Socket.IO监听一个尚不存在的服务器,导致EACCES
,因此不提供客户端文件。这就是你正在做的事情:
// the HTTP server doesn't exist yet
var io = require('socket.io').listen(server);
var server = http.createServer();
如果你在服务器端错误控制台中看到,你会得到这个:
info: socket.io started
warn: error raised: Error: listen EACCES
要解决此问题,请在创建服务器后将listen功能移至:
var server = http.createServer();
var io = require('socket.io').listen(server);
一旦Socket.IO正确侦听,它将自动将客户端文件提供给/socket.io/socket.io.js
。您无需找到它或手动提供它。
答案 1 :(得分:2)
您需要的客户端文件位于node_modules文件夹中:
node_modules/socket.io/node_modules/socket.io-client/dist/socket.io.js
Socket.io应该提供此文件,因此您无需将其复制到其他位置。例如,如果您正在运行socket.io服务器:
http://localhost:5000
然后脚本将从以下地址提供:
http://localhost:5000/socket.io/socket.io.js
如果您正在从其他应用程序或其他端口使用socket.io,则代码示例中的相对URL将不起作用。您需要手动包含客户端脚本或尝试包含客户端节点模块(如果由节点应用程序使用)。
您可以在此处查看客户端存储库以获取更多信息: https://github.com/LearnBoost/socket.io-client