使用 sails.io 库将跨域-socket.io 集成到客户端

Integrate cross-domain-socket.io using sails.io library to client

我已经在我的服务器上编写了一个基于 sails.js 的聊天应用程序,所以客户端的所有代码基本上都是 运行 在本地主机上。

聊天就像做梦一样,但现在我想将所有客户端移动到我的 cordova 应用程序。

这是我的服务器端代码(socket.js)

onConnect: function(session, socket) {

    // By default, do nothing.
    console.log('hello');
    socket.emit('news', "Welcome to the chat");

    socket.on('send message', function(data){
        console.log(data);
        socket.broadcast.emit('new', data);
        sails.sockets.emit(sails.sockets.id(socket),'new', data);
    });
},

这是我的客户端(服务器本地主机)聊天文件:

$('#form1').submit(function(e){
    e.preventDefault();
    io.socket.emit('send message', $('#userText').val());
    $('#userText').val('');
});

io.socket.on('news', function (msg) {
    console.log(msg);
    $('#content').append(msg + '<br />');
});

io.socket.on('new', function(data){
    console.log(data);
    $('#content').append(data + '<br />');
});

这是请求 userCategories API:

的客户端(服务器本地主机)
io.socket.get('http://178.62.83.248:1337/userCategories', function (resData)    {
   console.log(resData); // => {id:9, name: 'Timmy Mendez'}
});

io.socket.on('usercategories', function(message){
    console.log(message);
});

现在这是我在我的 cordova 客户端上尝试过的 (index.js):

<script src="lib/sails.io.js/sails.io.js"></script>
<script>
    io.sails.url = 'http://178.62.83.248:1337';
    io.socket.get('http://178.62.83.248:1337/userCategories', function (resData) {
      console.log(resData); // => {id:9, name: 'Timmy Mendez'}
    });

    io.socket.on('usercategories', function(message){
        console.log(message);
    });
</script>

此代码的行为非常奇怪 way.when 应用程序启动,它尝试连接到:http://178.62.83.248:1337/__getcookie 然后它失败了? returns 我在控制台中看到这条消息:

        Socket is trying to reconnect to Sails...
 _-|>_-  (attempt #1)

        Socket is trying to reconnect to Sails...
 _-|>_-  (attempt #2)

尝试 43、44 等...

所以我希望有人能向我解释这是什么意思,我该如何解决这个问题。

我已经解决了这个问题。发生这种情况的原因是因为当您在客户端上安装 sails.io 文件时,您实际上安装的是最新版本。为了连接到您的服务器,您需要使用正确版本的 sails io.js。在我的例子中,我在服务器上使用了 sails 10.5,所以我必须在我的客户端中包含特定文件