Cordova - SocketIO未连接

时间:2017-05-28 09:04:41

标签: ios node.js cordova socket.io

我使用cordova和socket.io连接到我的nodejs服务器

这是我的服务器代码

var app = require('express')();
var http = require('http').Server(app);
var io = require('socket.io')(http);
var process = require('process');

io.on('connection',function(socket){
    console.log('a user connected');
    socket.emit("message",{message:"connected"});
    socket.on('disconnect', function(){
        console.log('user disconnected');
    });
});

http.listen(port,function(){
    console.log("Listening to port ",port);
});

app.get('/', function(req, res){
  res.send('<h1>Hello world</h1>');
});

这是我的客户端代码

app.initialize();

document.addEventListener('deviceready', function() {
    console.log("Device Ready!"); //displayed

    var socket = io('http://127.0.0.1:3000');
    //tried my LAN IP and still failed

    console.log('socket created'); //displayed
    console.log(typeof socket); // displays "object"

    socket.on('connect',function(){
        console.log("Connected!");
        //never displays
    });

    socket.on("message",function(data){
        console.log(data);
    });
});

我尝试使用我的xampp / htdocs上托管的代码连接到我的nodejs服务器并成功连接!

<!DOCTYPE html>
<html>
<head>
    <title></title>
    <script type="text/javascript" src="https://cdnjs.cloudflare.com/ajax/libs/socket.io/2.0.1/socket.io.slim.js"></script>
</head>
<body>
    <script type="text/javascript">
        var socket = io('http://127.0.0.1:3000');

        socket.on('connect',function(){
            console.log("connected!");
        });

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

    </script>
</body>
</html>

我只是不明白为什么我的cordova应用程序不会触发连接,也许它不会发出任何错误。

非常感谢任何帮助。

谢谢!

2 个答案:

答案 0 :(得分:0)

您的Cordova App是否使用与NodeJS服务器相同的网络? 由于您已使用“http://127.0.0.1:3000”连接套接字,因此Cordova App必须位于同一网络到服务器。

答案 1 :(得分:0)

在尝试解决了好几个小时之后,我终于解决了它。 问题是由于内容 - 安全 - 政策

我在index.html

中更改了此html代码
<meta http-equiv="Content-Security-Policy" content="default-src 'self' data: gap: https://ssl.gstatic.com 'unsafe-eval'; style-src 'self' 'unsafe-inline'; media-src *; img-src 'self' data: content:;">

<meta http-equiv="Content-Security-Policy" content="default-src 'self' data: gap: * 'unsafe-eval'; style-src 'self' 'unsafe-inline'; media-src *; img-src 'self' data: content:;">

希望这会很快帮助别人。