Javascript 套接字连接

Posted

技术标签:

【中文标题】Javascript 套接字连接【英文标题】:Javascript socket connection 【发布时间】:2012-02-27 13:39:46 【问题描述】:

通过可监听的套接字连接发送信息(在本例中为温度数据,每秒)的服务器。

目标是使用 javascript 在网页上显示温度并动态更新值。

无法修改服务器。

【问题讨论】:

Javascript 不能做 TCP。您需要服务器端帮助。 看看this @zneak - 为什么 Javascript 不能做 TCP?我看到一个新的标准在 Javascript 脊椎上蔓延:w3.org/TR/raw-sockets Connecting to TCP Socket from browser using javascript的可能重复 @kilaka,这个问题(和评论)已有两年历史了。你回答了你自己的问题,说它是新的。 【参考方案1】:

您需要做的是与 php 或其他服务器端建立连接,并通过 AJAX 将结果返回到您的 JavaScript。

【讨论】:

AJAX 一般来说,对于推送来说并不是那么好——每次更新都需要一个请求,即每秒 1 个 HTTP 请求!此外,使用 AJAX 意味着您必须能够处理诸如根本没有输出的极端情况,以及实现一种不会错过更新的机制。如果你不想使用 WebSocket,你真的应该使用像 Server-Sent Events 这样的东西。 @phihag 请注意,Firefox 实际上可以处理 XMLHTTPRequest 中的服务器推送,因此它可以接收多个 XML 文档流。 ajax 打不开连接... @KarueBensonKarue 这一切都取决于很多因素,这些因素都与上面的帖子无关。此人似乎认为您可以通过 JavaScript 打开任意 TCP 连接,这在浏览器中是不可能的。关键是您需要 something 服务器端来代理数据。 AJAX、Web Sockets、刷新的 iframe,只要适合您的情况。【参考方案2】:

JavaScript 可以打开任意 TCP 连接,因为当与基于 IP 地址或根本不进行身份验证的服务结合使用(并且仅受防火墙保护)时,这将允许各种混乱.这包括 Windows 或 NFS 文件共享、普通打印机、普通 LAN 游戏、普通家用路由器的 Web 界面和大量企业软件。

您无法真正阻止浏览器访问恶意网站(因为其中包括visiting a trusted site with malicious ads)。如果这些站点可以影响任意 TCP 连接,他们可以例如尝试RFC 1918 private address ranges 中的每个 IP 地址,或客户端来自的组织地址范围内的每个 IP 地址,并确定您拥有哪些设备。仅此一项就构成了严重的隐私泄露,但想象一下,恶意软件网站找到一台打印机,然后在您不小心访问它时打印出垃圾邮件

您可以做的是使用WebSocket 服务器将本机 TCP 转换为 WebSocket。大多数 Websocket 实现都会有这样一个服务器作为演示应用程序,但您也可以使用standalone proxy。

【讨论】:

何为混乱?通过原始 TCP 发送自定义数据有很多优势 - 从简单到优化。 @kilaka 好吧,一方面,许多服务和设备(例如 Windows 文件共享、本地家庭路由器、游戏、打印机等)仅连接到本地 IP 地址或给予特殊偏好。因此,如果 JavaScript 允许任意 TCP 连接,例如,每个恶意软件站点都可以在每台连接的打印机上打印出垃圾邮件 不同意 - 浏览器是连接到特定服务器/端口的发起者。它不能真正接收来自其他服务器/机器的任意数据(垃圾邮件)。 @kilaka 似乎对这个场景有误解。我已经更新了答案。如果您在阅读后仍然不同意,我为您提供一个演示文稿。给我一种方法,允许您从浏览器进行任意 TCP 连接,并从您家中和办公室的典型计算机访问我的示例站点,我将对此进行演示。

以上是关于Javascript 套接字连接的主要内容,如果未能解决你的问题,请参考以下文章

JavaScrip笔记心得(持续更新)

JavaScrip笔记心得(持续更新)

JavaScrip笔记心得(持续更新)

JavaScrip book

JavaScrip入门

JavaScrip和Java一样吗?