我正在使用nodejs和express来创建一个基本的聊天应用程序,并在尝试初始化socket.io对象时收到网络404错误消息。
<script src="/javascripts/socket.io/socket.io.js-client"></script>
<script type="text/javascript">
var socket = io.connect();
</script>
上面的代码导致某些轮询调用出现404错误
"NetworkError" 404 Not Found - http://localhost:3000/socket.io/?EIO=3&transport=polling&t=1432851505880-89
我需要使用以下网址运行轮询:http://localhost:3000/javascripts/socket.io/?EIO=3&transport=polling&t=1432851505880-89
因为我使用快递,但不知道如何实现这一点。
服务器端代码:
var app = express();
var server = require( "http" ).createServer( app );
var io = require("socket.io").listen(server);
server.listen(8888);
io.sockets.on('connection', function(socket){
socket.on('send message', function(data){
io.sockets.emit('new message', data);
});
});
module.exports = app;
我一直试图解决这个问题很长一段时间没有成功。我很感激任何建议。注释掉var socket = io.connect()
可以解决错误。感谢任何建议。
由于
答案 0 :(得分:2)
您的网页显然在端口3000上运行,但您的socket.io服务器正在侦听端口8888.这两个端口必须是同一个端口,因此对端口上的socket.io请求没有响应就不足为奇了3000(因为您的socket.io服务器正在侦听端口8888)。
因为它尝试的默认URL是端口3000,那么它必须是您的网页是一个端口,并且必须由不同的Web服务器提供服务。如果是这种情况,那么您需要做以下两件事之一:
将为您的网页提供服务的网络服务器与socket.io服务器相结合,以便同一台服务器负责处理这两者。
在客户端请求中指定端口,并为您的socket.io服务器启用跨源请求。
要在客户端请求中指定端口,您可以执行以下操作:
<script src="http://myserver.com:8888/socket.io/socket.io.js"></script>
<script type="text/javascript">
var socket = io("http://yourserver.com:8888");
</script>
请注意,这是从socket.io服务器所在的快速服务器请求客户端socket.io库(因此它使用的是运行socket.io服务器的端口)。
答案 1 :(得分:0)
如果正在提供socket.io客户端javascript的HTML 而不是也由端口8888
的快递服务(看起来html来自端口3000
}),您可能只需要将socket.io客户端配置为指向服务器端socket.io已设置为侦听的端口(8888
):
var socket = io.connect('localhost:8888');