【问题标题】:real-time socket.io client web browser实时 socket.io 客户端网络浏览器
【发布时间】:2018-04-23 14:44:58
【问题描述】:

我正在尝试创建一个简单的本地网络服务器,用于从远程服务器收集实时数据。远程服务器不在我的控制之下,它不断地输出文本行。

我认为 scocket.io 可以用于此目的,但我对 node.js 真的很陌生,我不知道问题出在哪里。我已经安装了socket.io:

npm install socket.io

然后我编写了一个简单的 index.html 页面,部署在我的 www 目录中:

<!DOCTYPE html>
<html>
    <head>
    <script src="socket.io/socket.io.js"></script>
    <script>
        var socket = io.connect('http://192.168.1.100:8888');
        socket.on('data', function(msg) {
            var val = msg;
             $('#data_value').html(val);
        })
    </script>
</head>
<body>
    <h1>Data Stream</h1>
        lines: <span id="data_value"></span><br/>
</body>
</html>

当我用浏览器加载 index.html 时,我可以看到带有正确标题和字符串“lines:”的网页,但没有打印出任何数据。

如果我尝试直接浏览http://92.168.1.100:8888 的远程服务器,我可以看到流。

你能帮帮我吗?

【问题讨论】:

  • "如果我尝试直接浏览92.168.1.100:8888 的远程服务器,我可以看到流。"你可以看到蒸汽是什么? HTML、XML、JSON 字符串?如果您可以在浏览器上看到它,我认为这不是 websocket 服务器的端口?
  • 好吧,我把192.168.1.100:8888 放在我的浏览器上,我可以看到字符串下来了。我认为它们是 html,但重要的是它们按预期显示。作为第二个测试,我可以使用 socat 收集它们:socat tcp:192.168.1.100:8888 -

标签: html socket.io real-time


【解决方案1】:

92.168.1.*,是路由器的家庭 IP 地址。您说服务器不在您的控制之下,但它仍在您的客户端尝试连接的同一路由器上运行。

因此,您正在侦听来自服务器的呼叫,端口为 8888,但该服务器是本地服务器。如果其他人正在运行此服务器,您将需要要求他们将其移植并将其公共 IP 地址发送给他们,否则您的网站只是在等待您的 PC 托管此服务器并向您发送数据:(

【讨论】:

  • 对不起,我弄错了地址是 192.168.1.100,目前我的机器在同一个本地子网下(我的 IP 是 192.168.1.99),我正在做的所有事情都在里面子网 192.168.1.
  • 可以看到服务器代码吗?我看不出这有什么问题。我建议将脚本标签放在正文标签下方
  • 我告诉过你我没有访问服务器的权限。该流由已编译的代码生成。我会按照您的建议尝试移动脚本标签。
  • 好的,脚本标签已移动。不幸的是没有变化......叹息
  • 如果服务器没有使用 socket.io 编写,我认为您将无法获取这些数据。因为客户端正在收听名为“数据”的 Socket.io 广播
【解决方案2】:

我认为您误解了 socket.io 的工作原理。 问题似乎出在您代码的socket.on 部分。 Socket.io 只响应 socket.io 广播事件,而不是服务器正在更新的字符串流。

192.168.1.100 服务器是 socket.io 服务器吗?如果不是,那么您的 Web 应用程序将无法作为 socket.io 客户端运行。

【讨论】:

    猜你喜欢
    • 2017-01-07
    • 2023-01-10
    • 2019-06-13
    • 2015-10-21
    • 2013-05-07
    • 1970-01-01
    • 2016-06-16
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多