通过JavaScript连接到套接字(不带闪存)

时间:2010-03-02 21:55:00

标签: javascript sockets

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

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

我无法沿着闪存路径走下去,因为跨域安全性是一个障碍,即无法修改套接字上运行的服务以支持Flash的跨域安全性。

基于纯JS的解决方案有哪些选择?

4 个答案:

答案 0 :(得分:1)

你有两个主要问题:

  1. javascript中很难访问非HTTP资源,
  2. javascript中很难访问未从同一服务器加载的资源。
  3. 这两种情况都有例外情况,但可用的例外情况可能与您需要的情况完全不符。以下是一些可能性:

    1. 您自己的服务器上的某种代理,代表您的网络应用程序使用XML服务连接回机器。

    2. 如果您可以稍微控制客户端计算机,则可以在其上运行可以将XML嵌入到JSONP格式的http响应中的服务器,您可以通过添加简单的脚本标记来访问,并通过使用其他方式发送消息一个脚本标记,用于请求将您的数据编入其中的网址。

    3. 如果你说'socket'你指的是HTTP连接,那么有很多选项,一个是向HTTP添加一个Access-Control-Allow-Origin标头,那你可以在最近的浏览器中使用普通的XMLHttpRequests进行获取和发布。

答案 1 :(得分:0)

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

答案 2 :(得分:0)

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

答案 3 :(得分:0)

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

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