通过JavaScript连接套接字(无需Flash)

3

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

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

由于跨域安全性限制,我无法使用Flash路径,即运行在套接字上的服务无法被修改以支持Flash的跨域安全性。

那么,我有哪些纯JS解决方案可供选择?


听起来你似乎在试图违反同源策略。 - rook
4个回答

1

你面临两个主要问题:

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

虽然有例外情况,但可用的例外情况可能与您需要的不完全匹配。以下是一些可能性:

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

  2. 如果您可以在某种程度上控制客户端机器,则可以在其上运行服务器,该服务器可以将XML嵌入JSONP格式的http响应中,您可以通过添加简单的脚本标记来访问它,并使用脚本标记发送消息请求包含您的数据编码的URL。

  3. 如果您所说的“socket”是指HTTP连接,则有多种选择,其中一种是向HTTP添加Access-Control-Allow-Origin头,然后您可以在最新的浏览器中使用普通的XMLHttpRequests进行获取和发布。


0
Javascript不能让你创建一个与客户端的套接字连接, 这会违反同源策略(same origin policy)。如果你可以在本地机器上保存一个applet/swf, 你就可以将其作为file:///提供,并且它可以与localhost进行通信(也许!但未经测试)。

嗯,是的,我明白了。 Adobe的Flash安全性不允许在非托管的swf文件上进行套接字连接(即从file://),但我可以嵌入一个swf文件来处理套接字通信。我想调查一些不需要Flash的纯选项。 Websockets看起来很有趣,在支持的浏览器中。 http://dev.w3.org/html5/websockets/ 还在调查自定义插件/扩展选项。 所有路径似乎都通向其他插件/小部件的桥接 :( - Vaughan

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

0

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

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


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接