sockets - socket.io: 加载资源失败

  显示原文与译文双语对照的内容
0 0

我正在尝试使用 socket.io 和 node.js.

按照 socket.io 站点的第一个示例,我在浏览器的控制台中得到以下错误:


Failed to load resource: the server responded with a status of 404 (Not Found) http://localhost:3001/socket.io/socket.io.js
Uncaught ReferenceError: io is not defined 

这是我的server.js


var app = require('express').createServer()
, io = require('socket.io').listen(app);

app.listen(3001);

app.get('/', function (req, res) {
 res.sendfile(__dirname + '/index.html');
});

io.sockets.on('connection', function (socket) {
 socket.emit('news', { hello: 'world' });
 socket.on('my other event', function (data) {
 console.log(data);
 });
});

这是我的index.html


<!DOCTYPE html>
<html>
 <head>
 <title></title>
 <meta charset="UTF-8"/>
 </head>
 <body>
 <script src="/socket.io/socket.io.js"></script>
<script>
 var socket = io.connect('http://localhost');
 socket.on('news', function (data) {
 console.log(data);
 socket.emit('my other event', { my: 'data' });
 });
</script>
 </body>
</html>

我已经安装了 socket.io. 。

时间: 原作者:

0 0

问题

  • 首先,你需要查看服务器端( app.listen(3001); ) 上服务器绑定的服务器端口,以便在服务器端访问服务器。

  • 对于 socket.io,在链接标记中的其他源之前添加 http://localhost:3001 解决了这个问题。 这显然是由于网络将端口绑定到本地主机的方式,但是我将尝试查找有关原因的更多信息;

如何更改:


服务器的端口绑定:

var socket = io.connect('http://localhost');

应该改为

var socket = io.connect('http://localhost:3001');



使 socket.io 工作的

<script src="/socket.io/socket.io.js"></script>

应该改为

<script src="http://localhost:3001/socket.io/socket.io.js"></script>


原作者:
0 0

如果你使用的是 express 版本 3.x,则 socket.io 兼容性问题需要一些微调来迁移:

socket.io 方法的.listen() 以一个 http.Server 实例作为参数。
3 。x, express()的返回值是 NOT http.Server 实例。 要让 socket.io 处理 3. x,,请确保手动创建并将 http.Server 实例传递给 socket.io 方法的.listen()

下面是一个快速示例:


var app = express()
, http = require('http')
, server = http.createServer(app)
, io = require('socket.io').listen(server);

server.listen(3000);

原作者:
0 0

如果你试图在不同的计算机上运行这里程序,而你正收到这里错误,则可能会发现这里。


var host = window.location.hostname; 
var socket = io.connect('http://' + host);

如果你使用的是 https,那么显然你需要更改协议。 在我的案例中,我需要创建一个服务器,该服务器将在几个本地计算机上运行,因此在这里放置一个固定地址将 NOT 工作,因为套接字需要根据你加载页面的内容来连接不同的地址。 在这里添加它可能会对别人有所帮助。

原作者:
0 0

试试这个


var app = express()
,http = require('http');

var server = http.createServer(app);
server.listen(3001);
io = require('socket.io').listen(server);
io.set('log level', 1); 

希望它可以帮助

原作者:
0 0

我知道这非常晚,但我找到了一个解决方案,这些人可能以前设置了 node.js 。 我的机器需要得到硬件更换,当它回来后,我注意到了一些设置回到工厂默认的。 我也得到了上面讨论的错误。

正在运行

sudo apachectl启动

从终端修复我的问题。

...