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

通过JavaScript连接到套接字(不带flash),javascript,sockets,Javascript,Sockets,我有一个基于浏览器的应用程序,需要使用JavaScript通过浏览器的套接字连接与客户端机器上运行的另一个服务进行通信 我需要在套接字上来回发布和解析XML 由于跨域安全性是一个障碍,我无法进入flash路径,即套接字上运行的服务无法修改以支持flash的跨域安全性 对于纯基于JS的解决方案,我有哪些选择?Javascript将不允许您创建到客户端的套接字连接。这将违反法律。如果你能以某种方式将小程序/swf保存到本地机器上,你可以将其作为文件://提供,并且它可以与本地主机通信(可能!未测试)

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

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

由于跨域安全性是一个障碍,我无法进入flash路径,即套接字上运行的服务无法修改以支持flash的跨域安全性


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

Javascript将不允许您创建到客户端的套接字连接。这将违反法律。如果你能以某种方式将小程序/swf保存到本地机器上,你可以将其作为
文件://
提供,并且它可以与
本地主机
通信(可能!未测试)。

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

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


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

这里有两个主要问题:

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

  • 您自己的服务器上的某种代理,代表您的web应用通过XML服务连接回机器

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

  • 如果说“socket”指的是HTTP连接,那么有很多选项,其中一个选项是向HTTP添加访问控制Allow Origin头,然后可以在最近的浏览器中使用普通的XMLHttpRequests执行GET和POST


  • 嗯,是的,我明白了。没有Adobe的Flash安全性不允许在非托管swf(即从文件://)上进行套接字连接,但我可以在页面中嵌入swf以查看套接字通信。我想调查任何不需要flash tho的纯选项。在受支持的浏览器中,WebSocket看起来很有趣。还研究了自定义插件/扩展选项。所有路径都指向其他插件/小部件,看起来:(听起来好像你在试图违反同源策略。