【问题标题】:node.js Cannot GET /socket.ionode.js 无法获取 /socket.io
【发布时间】:2015-12-02 21:18:19
【问题描述】:

我有以下带有 express/socket.io 的应用程序(该应用程序正在侦听并且没有任何错误)。 当我 http 请求它时,我收到以下错误:

GET http://xxxxxxx.com:3035/socket.io/1/?t=1449090610579 400 (Bad Request)

http://xxxxxxx.com:3035/socket.io 的 socket.io 回复中,我得到:

Cannot GET /socket.io

app.js:

var express = require('express'),
    http = require('http'),
    sio= require('socket.io'),
    fs=require('fs'),
    app = express();

var mysql      = require('mysql');
var connection = mysql.createConnection({
        host: 'localhost',
        user: 'xxxxxxx',
        password: 'xxxxxxx',
        database: 'xxxxxxxxx'
    }
);
connection.connect();

// Start the server
var server=app.listen(3035, function () {
    console.log("Express server listening on port %d",3035);
});
app.io=io=sio.listen(server);
.
.
.

在客户端:

var socket = io.connect('http://xxxxxx.com:3035');

【问题讨论】:

  • 看起来它无法获取静态脚本文件,因为您缺少基本的静态路由。
  • 这在我迁移到新服务器之前运行良好。不确定到底缺少什么!
  • 那么它可能不是静态路由的东西,如果我没记错的话,Socket.io会创建它自己的路由。迁移时发生了一些变化,并且 URL 不再正确,您可能需要自己进行一些故障搜索。
  • 是的,我想弄清楚。谢谢你的提示。
  • var express = require('express')(); var http = require('http').Server(express); var sio = require('socket.io')(http);

标签: javascript node.js express socket.io


【解决方案1】:

io.connect() 接受一个 URL,例如 http://example.com:3035

您传递的 xxxxxx.com:3035 不是正确的 URL 形式。


另外,请注意,如果您只是想连接到与网页来源相同的服务器和端口,您可以使用:

io()

io.connect()

socket.io 库将连接回与网页相同的主机和端口。

【讨论】:

  • 我使用的是带有 http 的完整 URL。抱歉,我在屏蔽域时输入错误,我会更正它。使用 io() 破坏了我的应用程序,不知道为什么!
  • 顺便谢谢您的回答。更多提示可以让我找出问题所在!
【解决方案2】:

你的 sio 是一个函数。你需要用你的服务器作为参数调用它。

添加 server=require('http').Server(app) sio=require('socket.io')(server)

【讨论】:

  • 我尝试过同样的方法,但徒劳无功。谢谢你。我会试试这个!
【解决方案3】:

您应该在客户端初始化默认连接

io.connect( "/" );

根据文档,默认情况下,socket.io 将连接到渲染网页所在的同一主机和端口。路径中的/ 表示连接到默认命名空间。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2016-01-23
    • 1970-01-01
    • 2018-02-13
    • 1970-01-01
    • 2013-01-19
    • 2017-07-21
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多