Javascript nodejs socket.io获取http://domain/socket.io/?EIO=3&运输=投票及;t=导入socket.io时404的LrTVonQ状态

Javascript nodejs socket.io获取http://domain/socket.io/?EIO=3&运输=投票及;t=导入socket.io时404的LrTVonQ状态,javascript,node.js,socket.io,Javascript,Node.js,Socket.io,我的问题很简单,当我试图在我的网页上导入socket.io时,我实际上遇到了404错误。我正在使用 <script src="https://cdnjs.cloudflare.com/ajax/libs/socket.io/2.0.3/socket.io.js"></script> 然后我将客户端脚本直接放在我的页面中,而不是创建一个新文件,我没有真正理解它的意义。无论如何,该文件名为:index.php 代码位于文件的末尾,正好在body标记的末尾之前,在代码之前没有

我的问题很简单,当我试图在我的网页上导入socket.io时,我实际上遇到了404错误。我正在使用

<script src="https://cdnjs.cloudflare.com/ajax/libs/socket.io/2.0.3/socket.io.js"></script>
然后我将客户端脚本直接放在我的页面中,而不是创建一个新文件,我没有真正理解它的意义。无论如何,该文件名为:index.php 代码位于文件的末尾,正好在body标记的末尾之前,在代码之前没有其他js

<script type="text/javascript">
$(function() {
  var socket = io();

  socket.on('userupd', function (data) {
    $('.counter').html(data);
  });
});

如果您的网页来自端口80上的Apache web服务器,并且希望在同一主机上的node.js中创建socket.io服务器,则需要为该socket.io服务器选择一个新端口,并且在连接到socket.io服务器时,需要标识要连接的端口,因为默认端口为端口80,但这不是socket.io服务器所在的位置

我建议使用端口
8001
,就像您最初为socket.io服务器使用的那样。请将您的node.js代码更改回该值

然后,您可以通过以下方式更改页面中的socket.io代码:

<script type="text/javascript">
$(function() {
  var socket = io();

  socket.on('userupd', function (data) {
    $('.counter').html(data);
  });
});
</script>

$(函数(){
var socket=io();
socket.on('userupd',函数(数据){
$('.counter').html(数据);
});
});
为此:

<script type="text/javascript">
$(function() {
  var url = window.location.protocol + "//" + window.location.hostname + ":8001";
  var socket = io(url, {transports: ['websocket'], upgrade: false});

  socket.on('userupd', function (data) {
    $('.counter').html(data);
  });
});
</script>

$(函数(){
var url=window.location.protocol+“/”+window.location.hostname+“:8001”;
var socket=io(url,{transports:['websocket'],升级:false});
socket.on('userupd',函数(数据){
$('.counter').html(数据);
});
});
这会将socket.io连接到与您的网页相同的协议和主机,但使用不同的端口,并且它将仅使用webSocket,这样您就不会遇到socket.io通常尝试使用Ajax轮询来启动连接的跨源问题


如果您的socket.io服务器实际上与Apache服务器位于不同的主机上,那么您需要将该主机放入URL,而不是
window.location.hostname

嗯,URL
https://cdnjs.cloudflare.com/ajax/libs/socket.io/2.0.3/socket.io.js
从这里开始工作非常好。所以,如果你在这个URL上得到了404,那么在你查看的时候,可能是一个暂时的小故障,或者是你的终端出现了网络问题,或者是你错误地认为是什么给了你404。那个URL对我来说似乎工作得很好。您需要
socket.io.js
,因为这是使socket.io在浏览器中工作的socket.io库。我仍然收到错误消息。所以我认为这是我这边的网络问题。但这也很奇怪,因为我用的是在OVH买的vps。。。换句话说,我确信我在URL上得到了404错误。您的404似乎位于此URL
http://goldenvision.ml/socket.io/?EIO=3&transport=polling&t=LrVsppJ
尝试启动从客户端到服务器的socket.io连接。这意味着服务器未正确侦听该主机和端口上的socket.io连接。在我看来,您的404URL确实试图在端口80上建立socket.io连接,但您的服务器正在侦听端口8080。当您执行
var socket=io()时
在客户端中,该代码所在的客户端网页URL是什么?浏览器栏上显示的页面的活动URL是什么?浏览器会显示游戏id,这可能是您的问题所在。该页面URL中没有端口号,因此默认为端口80,但您的服务器正在侦听端口8001。如果执行
var socket=io()
,则会向与其所在页面URL相同的主机和端口发出请求。除非您有一些服务器端基础设施(如代理)将传入的请求重定向到端口80以转到端口8001,否则您的socket.io服务器将看不到端口80的任何请求,因此它们将生成404。谢谢!它起作用了。嗯,我现在没有收到错误,但它没有更新计数器。为此,我想我会在谷歌上搜索,但它没有得到错误,所以这是一个非常好的消息!编辑它工作正常,但不是在页面上的第一个连接上,它实际上更新了其他页面上的号码,但不是在最后一个连接的客户端上。所以非常感谢!非常感谢你,你帮了我很多忙!病人:)
<script type="text/javascript">
$(function() {
  var socket = io();

  socket.on('userupd', function (data) {
    $('.counter').html(data);
  });
});
</script>
<script type="text/javascript">
$(function() {
  var url = window.location.protocol + "//" + window.location.hostname + ":8001";
  var socket = io(url, {transports: ['websocket'], upgrade: false});

  socket.on('userupd', function (data) {
    $('.counter').html(data);
  });
});
</script>