通过socket.io连接到节点服务器的phonegap应用程序在浏览器上工作,但在应用程序中不工作

Posted

技术标签:

【中文标题】通过socket.io连接到节点服务器的phonegap应用程序在浏览器上工作,但在应用程序中不工作【英文标题】:phonegap app connected to node server by socket.io works on browser but not in app 【发布时间】:2013-09-28 13:34:24 【问题描述】:

我设置了一个节点服务器,它通过 socket.io 向客户端发送数据并在 phonegap 项目中使用它,

当我在浏览器和移动浏览器中测试它时它工作正常,但当我构建我在模拟器中运行的 ios 应用程序时它不起作用,

部分节点服务器代码:

define(['node-static','http'],function (Static,Http) 
return FileServer = function (server) 

    var httpFileServer = new Static.Server('./phonegap/www');

    Http.createServer(function (request, response) 
        request.addListener('end', function () 
            httpFileServer.serve(request, response);
        ).resume();
    ).listen(server.fileServerHTTPport,"0.0.0.0");

    return 
        // exampleVariable : function() return exampleVariable,
        // exampleFunction : exampleFunction
    
 );

index.html phonegap

... <script src="js/socket.io.js"></script>
<script src="js/jquery-2.0.3.min.js"></script>
<script>
var socket = io.connect('http://'+document.location.hostname+':54321');
   socket.on('display', function (data) 
      console.log(data.color);
      $("h1").text( data.color.h );
);
</script></head>
<body><h1> hello world</h1> ...

【问题讨论】:

【参考方案1】:

我想通了,我必须使用设备默认的 localhost ip, 所以例如在ios中:127.0.0.1

var socket = io.connect('http://127.0.0.1:54321');

【讨论】:

但是如果你说 localhost,当你的 nodejs 服务器在其他地方运行时,它将如何连接到你的服务器。 我不完全知道,但在这种情况下,我认为因为相同的 wifi 网络,它可以工作, 使用 127.0.0.1 有效,因为这是您的本地 IP,并且您正在模拟器中运行。如果您在真正的 iPhone 上运行,您将无法连接回您的开发设备。如果您使用此 IP 地址。您宁愿使用“真实”IP 地址,例如 192.168.178.xxx。请注意,当您在 Cordova/Phonegap 中打开应用时,window.location.hostname == '',而如果您在浏览器中打开应用,则它具有不同的值(例如 'localhost')。

以上是关于通过socket.io连接到节点服务器的phonegap应用程序在浏览器上工作,但在应用程序中不工作的主要内容,如果未能解决你的问题,请参考以下文章

Socket.io-client 未连接到 socket.io 服务器反应和节点(快递)

通过反向代理服务器将socket.io android客户端连接到套接字服务器

无法从android okhttp3连接到节点websocket

使用 Socket.io 将客户端连接到服务器

重新连接到我的 socket.io 服务器后,没有收到从我的 android 设备发送的事件

我是否可以通过socket.io和JavaScript将Unity程序连接到node.js服务器,如果可以,怎么办?