[英]Socket.io connection crashing node.js server
我以前从未真正使用过Socket.io,所以我不了解它是如何工作的。 这就是为什么我开始遵循本教程的原因:
http://danielnill.com/nodejs-tutorial-with-socketio/
不幸的是,关于错误的问题太可怕了,我得到了一个我似乎无法修复的错误。
我在个人服务器上运行此程序,该服务器已在Ubuntu上使用典型的LAMP服务器设置进行了设置。 显然,此练习不使用任何服务器资源,因此出于无益的原因,它仅位于www文件夹中。
因此,要连接到我的服务器,我可以转到http://computername/
但是要查看套接字页面,请转到http://computername:8001/
我的项目文件夹包含两个文件,“ server.js”和“ socket.html”。
启动项目后,我将node.js更新为0.10.18,然后使用“ sudo npm install socket.io”将Socket.io安装到目录中。
这是server.js:
var http = require('http');
var url = require('url');
var fs = require('fs');
var io = require('socket.io');
var server = http.createServer(function(request, response){
console.log('Connection');
var path = url.parse(request.url).pathname;
var waitToEnd = false;
switch(path){
case "/":
console.log("Returning homepage");
response.writeHead(200, {'Content-Type':'text/html'});
response.write('<strong>Hello World</strong>');
break;
case "/socket.html":
waitToEnd = true;
console.log("Returning socket page.");
fs.readFile(__dirname + path, function(error, data){
if(error){
console.log("Error...");
response.writeHead(404);
response.write('ERROR 404');
}
else{
console.log("Success...");
response.writeHead(200, {'Content-Type': 'text/html'});
response.write(data, "utf8");
}
response.end();
console.log("Continuing...");
});
break;
default:
response.writeHead(404);
response.write('ERROR 404');
break;
}
if (!waitToEnd){
response.end();
}
});
server.listen(8001);
ioOutput = io.listen(server);
这是socket.html:
<html>
<head>
<script src="/socket.io/socket.io.js"></script>
</head>
<body>
<script>
var socket = io.connect();
</script>
<div>This is our socket.html file</div>
</body>
</html>
每当我启动服务器并导航到socket.html时,它都会加载页面信息,但会立即出现以下错误:
GET http://computername:8001/socket.io/?EIO=3&transport=polling&t=1413317092992-41 net::ERR_CONNECTION_REFUSED
socket.io.js:2680Request.create
socket.io.js:2680Request
socket.io.js:2614XHR.request
socket.io.js:2555XHR.doPoll
socket.io.js:2585Polling.poll
socket.io.js:2951Polling.doOpen
socket.io.js:2895Transport.open
socket.io.js:2106Socket.open
socket.io.js:1580Socket
socket.io.js:1467Socket
socket.io.js:1419Manager.open.Manager.connect
socket.io.js:272(anonymous function)
一旦得到这个,我的服务器就会因为大量的转储而崩溃。 我能在其中找到的最类似于错误的输出是“ TypeError:对象函数Buffer(subject,encoding,offset)” ...
我在其他地方读过,类似的错误与复制连接有关,并且我注意到,如果我取出尝试建立连接的代码,只剩下socket.io代码和其他基本服务器代码,它将每两对注册一次连接秒,即使我从未告诉过。 有人对此有解释吗?
您需要使用服务器实例实例化socket.io服务器,而不是使用listen,否则它将创建自己的http服务器。
server.js:
var http = require('http');
var url = require('url');
var fs = require('fs');
var server = http.createServer(handler);
var io = require('socket.io')(server);
var handler = function(request, response){
console.log('Connection');
var path = url.parse(request.url).pathname;
var waitToEnd = false;
switch(path){
case "/":
console.log("Returning homepage");
response.writeHead(200, {'Content-Type':'text/html'});
response.write('<strong>Hello World</strong>');
break;
case "/socket.html":
waitToEnd = true;
console.log("Returning socket page.");
fs.readFile(__dirname + path, function(error, data){
if(error){
console.log("Error...");
response.writeHead(404);
response.write('ERROR 404');
}
else{
console.log("Success...");
response.writeHead(200, {'Content-Type': 'text/html'});
response.write(data, "utf8");
}
response.end();
console.log("Continuing...");
});
break;
default:
response.writeHead(404);
response.write('ERROR 404');
break;
}
if (!waitToEnd){
response.end();
}
};
console.log("server listening");
server.listen(8001);
io.on('connection', function (socket) {
console.log("socket connected");
socket.emit('test', { hello: 'world' });
socket.on('test_in', function (data) {
console.log(data);
});
});
client.js:
<script src="/socket.io/socket.io.js"></script>
<script>
var socket = io();
socket.on('test', function (data) {
console.log(data);
socket.emit('test_in', { hello: 'too' });
});
</script>
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.