我使用socket.io最新版本发现了这个错误:" index.js:83 POST http://localhost/socket.io/? EIO = 3& transport = polling& t = MDUHEO9 404(未找到)"。 我理解原因:真正的地址必须是http:// localhost:3000 / socket.io /。 你知道我怎么纠正吗?
我已经阅读了很多讨论,但没有人为2.1.0版提供合适的解决方案,即使在我阅读降级提案的讨论中,我也希望避免使用。
client.js:
<script src="http://localhost:3000/socket.io/socket.io.js"></script>
<script src="https://code.jquery.com/jquery-1.11.1.js"></script>
<script>
$(function () {
var socket = io().connect('http://localhost:3000');
$('form').submit(function(){
socket.emit('chat message', $('#m').val());
$('#m').val('');
return false;
});
socket.on('chat message', function(msg){
$('#messages').append($('<li>').text(msg));
});
});
</script>
server.js:
var app = require('express')();
var http = require('http').Server(app);
var io = require('socket.io')(http);
app.get('/', function(req, res){
res.sendFile(__dirname + '/index.html');
});
io.on('connection', function(socket){
socket.on('chat message', function(msg){
io.emit('chat message', msg);
});
});
答案 0 :(得分:1)
此处的问题是您已将任何端点定义为服务器socket.io
客户端文件。这就是你获得404
的原因。
如果您使用npm
安装,只需添加以下行即可允许快递服务器为您提供此类静态文件
app.use(express.static(__dirname + '/node_modules'));
如果你已经用凉亭安装socket.io
,请使用
app.use(express.static(__dirname + '/node_modules'));
或者您可以将socket.io
的客户端库放在任何位置,并根据
app.get('/socket.io', function(req, res){
res.sendFile("Path to socket.io.js file");
});
您无需在
中写完整地址<script src="http://localhost:3000/socket.io/socket.io.js"></script>
只需使用
<script src="/socket.io/socket.io.js"></script>
答案 1 :(得分:1)
改变这个:
var socket = io().connect('http://localhost:3000');
到此:
var socket = io.connect('http://localhost:3000');
或者这个:
var socket = io('http://localhost:3000')
最后两个中的任何一个都是相同的。
您只想使用一种形式的连接,io(...)
或io.connect(...)
,而不是两者。当您只是致电io()
时,您尝试连接到默认网址,该默认网址是当前网页的网址,然后当您尝试在此之后再.connect()
时,您就是&# 39;重新尝试连接。您只需要一个连接和指定的URL。