【问题标题】:Connecting to a specific Server Ip with Socket.io使用 Socket.io 连接到特定的服务器 IP
【发布时间】:2014-04-07 14:20:55
【问题描述】:

我必须为移动设备构建一个跨平台的网络应用程序,所以我正在使用 html、css 和 js 开发它(然后它将通过 phonegap 或 cordova)。

我的问题是使用 socket.io,我的问题是:

1) 我可以连接到客户端的特定 ip 吗?

而不是这样:

 <script src="/socket.io/socket.io.js"></script>
<script>
  var socket = io.connect('http://localhost');
  socket.on('news', function (data) {
    console.log(data);
    socket.emit('my other event', { my: 'data' });
  });
</script>

我需要这个,但这不起作用:

<script src="my-app/folder/js/socket.io/socket.io.js"></script>
<script>
  var socket = io.connect('http://my.server.ip:port');
  socket.on('news', function (data) {
    console.log(data);
    socket.emit('my other event', { my: 'data' });
  });
</script>

2) 在服务器端,如何创建一个服务器来监听其 IP 上的连接和消息?

var io = require('socket.io').listen(80, my.server.ip);

这样,应用程序的用户将连接到我托管聊天服务的服务器 Ip。

我想我没有考虑 socket.io 的正确逻辑。

【问题讨论】:

    标签: node.js sockets cordova


    【解决方案1】:

    部署应用程序时,您不会连接到 localhost,设备将连接到服务器主机名或 IP 地址。

    您服务器上的以下代码将在与指定端口上的服务器关联的 IP 地址上运行 socket.io,前提是该服务器可通过该 IP 地址访问

    var io = require('socket.io');
    var server = http.createServer();
    server.listen(port, ipAddress);
    var socket = io.listen(server);
    

    以下代码在客户端应该可以正常工作

    var socket = new io.Socket();
    socket.connect('http://' + ipAddress + ':' + port);
    

    确保您能够从客户端设备通过网络连接到 IP 地址以使其正常工作。

    【讨论】:

    • 非常感谢您的回答。我现在的问题是客户端无法加载socket.io lib。我在 1.2.3.4:1234 上启动了一个服务器,当我连接到这个地址(我的 index.html 托管在 Xammp htdocs 文件夹上)时,控制台向我显示了这个错误“GET 1.2.3.4:1234/socket.io/socket.io.js”。为什么?
    • 您使用的是哪个 Express 版本? API 已从 Express 2.x 更改为 3.x,因此答案在 Migrating from 2.x to 3.x wiki 的 Socket.IO 兼容性部分:Socket.IO 的 .listen() 方法采用 http。服务器实例作为参数。从 3.x 开始, express() 的返回值不是 http.Server 实例。要让 Socket.IO 与 Express 3.x 一起使用,请确保手动创建 http.Server 实例并将其传递给 Socket.IO 的 .listen() 方法。
    猜你喜欢
    • 2013-04-21
    • 1970-01-01
    • 1970-01-01
    • 2012-12-29
    • 2015-06-13
    • 1970-01-01
    • 2013-01-30
    • 2018-10-06
    • 1970-01-01
    相关资源
    最近更新 更多