我使用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应用程序不会触发连接,也许它不会发出任何错误。
非常感谢任何帮助。
谢谢!
答案 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:;">
希望这会很快帮助别人。