当前位置:   article > 正文

sockjs 跨域_Spring 5.2.2 WebSockets之SockJS回退

sockjs跨域

SockJS回退

     在公共Internet上,超出控制范围的限制性代理可能会阻止WebSocket交互,这可能是因为它们未配置为传递Upgrade header,或者是因为它们关闭了看起来空闲的长期连接。

    解决这个问题的方法是WebSocket仿真,即先尝试使用WebSocket,然后再使用基于HTTP的技术来模拟WebSocket交互并公开相同的应用程序级API。

    在Servlet堆栈上,Spring框架为SockJS协议提供了服务器(以及客户端)支持。

SockJS简介

        SockJS的目标是让应用程序使用WebSocket API,但在运行时需要时,可以返回到非WebSocket的替代方案,而无需更改应用程序代码。

SockJS包括:

  • 以可执行narrated tests的形式定义的SockJS协议。

  • SockJS JavaScript客户端——浏览器中使用的客户端库。

  • SockJS服务器实现,包括Spring框架spring-websocket模块。

  • spring-websocket模块中的SockJS  Java客户端(从4.1版开始)。

narrated tests的形式(python实现):

import osimport timeimport jsonimport reimport unittest2 as unittestfrom utils_03 import GET, GET_async, POST, POST_async, OPTIONS, old_POST_asyncfrom utils_03 import WebSocket8Clientfrom utils_03 import RawHttpConnectionimport uuidtest_top_url = os.environ.get('SOCKJS_URL', 'http://localhost:8081')base_url = test_top_url + '/echo'close_base_url = test_top_url + '/close'wsoff_base_url = test_top_url + '/disabled_websocket_echo'cookie_base_url = test_top_url + '/cookie_needed_echo'

    SockJS是为浏览器设计的。它使用多种技术来支持多种浏览器版本。传输分为三类:WebSocket、HTTP流和HTTP长轮询。

     SockJS客户端首先发送GET /info从服务器获取基本信息。之后,它必须决定使用什么传输工具。如果可能,使用WebSocket。如果不是,在大多数浏览器中,至少有一个HTTP流选项。如果不是,则使用HTTP(长)轮询。

所有传输请求都具有以下URL结构:

https://host:port/myApp/myEndpoint/{server-id}/{session-id}/{transport}
  • {server-id}对于在集群中路由请求很有用,但不能在其他情况下使用。

  • {session-id}关联属于SockJS会话的HTTP请求。

  • {transport}表示传输类型(例如,websocket、xhr-streaming和其他类型)。

       WebSocket传输只需要一个HTTP请求就可以完成WebSocket握手。此后的所有消息都在该socket上交换。

      HTTP传输需要更多请求。例如,Ajax/XHR流依赖于服务器到客户端消息的一个长时间运行的请求,以及客户端到服务器消息的其他HTTP POST请求。长轮询与此类似,只是它

声明:本文内容由网友自发贡献,不代表【wpsshop博客】立场,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:https://www.wpsshop.cn/w/我家小花儿/article/detail/814755
推荐阅读
相关标签
  

闽ICP备14008679号