【问题标题】:socket connection always failing套接字连接总是失败
【发布时间】:2015-12-26 04:35:33
【问题描述】:

我正在编写一个连接到sails 服务器的应用程序。

此应用程序是用cordova、angularJS 和Ionic 编写的。

当我在浏览器中(使用ionic serve)启动我的应用程序时,套接字无法连接到服务器。这是我收到的信息:

GET http://localhost:8100/socket.io/?__sails_io_sdk_version=0.11.0&__sails_io_s…sails_io_sdk_language=javascript&EIO=3&transport=polling&t=1443472067762-4 404 (Not Found)

服务器在1337端口本地运行。我尝试将上面的URL更改为:

http://localhost:1337/socket.io/?__sails_io_sdk_version=0.11.0&__sails_io_s…sails_io_sdk_language=javascript&EIO=3&transport=polling&t=1443472067762-4

它正在工作。

在我的代码中,我在包含 sails.io.js 之后设置了 URL:

io.sails.url = 'http://localhost:1337';
io.sails.useCORSRouteToGetCookie = false;

为什么要求localhost:8100 而不是localhost:1337?

当我在我的移动设备上启动这个应用程序(将 url 设置为 http://192.168.1.10:1337)时,它工作正常。

sails.io.js 的版本是0.11.6,sails 的版本是0.11.0

【问题讨论】:

    标签: angularjs cordova ionic-framework sails.js sails.io.js


    【解决方案1】:

    localhost:8100 无法在您的移动开发环境中工作。我遇到了同样的问题,将 localhost 更改为您工作站的 ip 解决了问题

    【讨论】:

    • 实际上在我的手机上它可以工作,因为通过 io.sails.url 更改 URL 可以工作,但不能在桌面上
    • 是的,对于桌面(模拟器),您必须使用本地服务器 IP,而不是 localhost
    • 但在桌面上我使用的是 localhost:1337 (这是我的服务器的主机),但它实际上使用的是 localhost:8100 ,这是我的应用程序所在的服务器(使用 Ionic)
    • @FabienHenon 运气好吗?我有这个配置工作,它在上周的某个时候开始失败。
    • @BradW 是的,我刚刚找到了解决方案!我加一下
    【解决方案2】:

    我终于找到了解决方案(但很抱歉我不记得在哪里找到了它:()

    问题是io.sails.url = 'http://localhost:1337';是在第一个JS循环之后执行的,因此sails套接字已经加载了。 (那是(根据我的理解)因为在某些浏览器中,如果代码在另一个 script 标签中,它会在另一个循环中执行)

    为了使它工作,我必须在包含sails套接字脚本之前添加此代码:

    var apiHost = 'localhost';
                (function (){
                    var io;
                    Object.defineProperty(window, 'io', {
                        get: function (){
                            return io;
                        },
                        set: function (value){
                            var sails;
                            io = value;
                            Object.defineProperty(io, 'sails', {
                                get: function (){
                                    return sails;
                                },
                                set: function (value){
                                    sails = value;
                                    sails.url = 'http://'+apiHost+':1337';
                                    sails.useCORSRouteToGetCookie = false;
                                }
                            });
                        }
                    });
                })();
    

    【讨论】:

    • 感谢您发布此信息。我已经尝试实现它,但仍然无法连接。与sails.useCORSRouteToGetCookie = false; 反复尝试连接不成功。没有它会失败一次,Failed to load resource: the server responded with a status of 404 (Not Found) http://MY_SAILS_IP:1337/__getcookie 有什么想法吗?
    • @BradW 我真的不知道,但奇怪的是它不能解决您的问题。就我而言,我将所有 js 文件包含在 head 标签中。首先,我将此代码(我的答案中的那个)添加为内联代码,然后包含我所有的库,它工作正常
    • @fabian 你加载socket.io-client/socket.io.js了吗?如果有,什么时候?
    • @BradW 是的,就在帆插座之前
    • 好的,这就是我用了将近 6 个月没有问题的方式。然后它在大约一周前停止了。我加载 socket.io-client 然后是sails.io.js,最后是io.sails.url = my_sails_api_ip:1337。现在它出错了; 404 'my_sails_api_ip:1337/__getcookie
    猜你喜欢
    • 2016-06-16
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2010-09-28
    • 2011-12-26
    • 1970-01-01
    • 2012-04-03
    相关资源
    最近更新 更多