使用sails.io库将cross-domain-socket.io集成到客户端

时间:2015-01-25 21:50:24

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

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

聊天工作就像一个梦想,但现在我想将所有客户端移动到我的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);
    });
},

这是我的客户端(server localhost)聊天文件:

$('#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的客户端(服务器localhost):

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>

这段代码非常奇怪。当应用程序启动时,它会尝试连接到:http://178.62.83.248:1337/__getcookie 然后它失败了?并在控制台中将此消息返回给我:

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

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

尝试43,44等......

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

1 个答案:

答案 0 :(得分:1)

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