【问题标题】:Connecting to a socket via JavaScript (without flash)通过 JavaScript 连接到套接字(不使用 flash)
【发布时间】:2010-03-02 21:55:00
【问题描述】:

我有一个基于浏览器的应用程序,它需要使用 JavaScript 通过来自浏览器的套接字连接与客户端计算机上运行的另一个服务进行通信。

我需要在套接字上来回发布和解析 XML。

由于跨域安全性是一个障碍,我无法继续使用 Flash 路径,即无法修改在套接字上运行的服务以支持 Flash 的跨域安全性。

对于纯 JS 解决方案,我有哪些选择?

【问题讨论】:

  • 听起来您正在尝试违反同源政策。

标签: javascript sockets


【解决方案1】:

这里有两个主要问题:

  1. 在javascript中很难访问非HTTP资源,
  2. 在 javascript 中很难访问不是从同一服务器加载的资源。

这两种情况都有例外,但可用的例外情况的组合可能与您的需要不完全匹配。以下是一些可能性:

  1. 您自己的服务器上的某种代理,代表您的 Web 应用程序连接回具有 XML 服务的计算机。

  2. 1234563一个脚本标签,用于请求包含您的数据编码到其中的 url。 1234563在最近的浏览器中使用普通的 XMLHttpRequest 获取和发布。

【讨论】:

    【解决方案2】:

    Javascript 不允许您创建到客户端的套接字连接。这将违反same origin policy。如果您能以某种方式将小程序/swf 保存到本地计算机,您可以将其作为file:/// 提供,它可以与localhost 通信(也许!未经测试)。

    【讨论】:

    • 嗯,是的,我明白了。没有 Adob​​e 的 Flash 安全性不允许在非托管 swfs 上进行套接字连接(即来自 file://),但我可以在页面中嵌入一个 swf 来管理套接字通信。我想研究任何不需要闪存的纯选项。在支持的浏览器中,Websocket 看起来很有趣。 dev.w3.org/html5/websockets 还在研究自定义插件/扩展选项。所有路径似乎都通向其他一些插件/小部件桥接:(
    【解决方案3】:

    也许在这个不可修改的套接字服务器前面创建一个代理可以为您打开一些选项。然后你可以使用 flash 之类的东西,或者你可以不使用套接字。

    【讨论】:

      【解决方案4】:

      基于套接字的交互选项仅限于支持此类实时功能的插件。这些选项通常分为以下 Flash、Java 和 Silverlight。如果我没记错的话,除了 Java 之外的所有这些都将有类似的政策要求。

      如果您控制自己的服务器,您可以创建一个套接字服务来将请求代理到最终目的地。或者,根据交互,您可以使用标准的 Ajax 样式请求并在服务器端代码上进行套接字交互。如果您不需要持久连接,最好通过服务器进行套接字交互。

      【讨论】:

        猜你喜欢
        • 2011-06-09
        • 1970-01-01
        • 2019-06-12
        • 2016-01-09
        • 1970-01-01
        • 2011-06-02
        • 2015-03-05
        • 1970-01-01
        • 2016-12-02
        相关资源
        最近更新 更多