webSocket_websocket连接_websocket与socket区别(5)

电脑杂谈  发布时间:2017-02-19 06:00:10  来源:网络整理

newServletServerHttpAsyncRequestControl时报错

public ServletServerHttpAsyncRequestControl(ServletServerHttpRequest request, ServletServerHttpResponse response) {

        Assert.notNull(request, "request is required");
        Assert.notNull(response, "response is required");

        Assert.isTrue(request.getServletRequest().isAsyncSupported(),
                "Async support must be enabled on a servlet and for all filters involved " +
                "in async request processing. This is done in Java code using the Servlet API " +
                "or by adding \"<async-supported>true</async-supported>\" to servlet and " +
                "filter declarations in web.xml. Also you must use a Servlet 3.0+ container");

        this.request = request;
        this.response = response;
    }

最长那一句断言报的错,说的是web.xml的servlet和filter中要加入<async-supported>true</async-supported>

看下web.xml中,filter中确实没有这一句,之所以一定要在filter中加入这一句,是因为websocket的切换协议请求,是通过filter拦截的,如果不在filter中配置async,则切换协议的请求将不是async的,所以上面就报错了。

filter中加上之后,就好了。

若为了让controller也支持async则需要在dispatcher中这样配置

再返回上面initRequest方法,只有该类AbstractHttpSockJsSession的public void handleInitialRequest(ServerHttpRequest request, ServerHttpResponse response,SockJsFrameFormat frameFormat)方法与

public void handleSuccessiveRequest(ServerHttpRequest request,ServerHttpResponse response, SockJsFrameFormat frameFormat)中有调用,而调用这两个方法的只有AbstractHttpSockJsSession的实现类:StreamingSockJsSession才有,就是spring-websocket为sockjs支持的xhr-streaming方式的实现类,而平时使用websocket的则是另外一个实现类:

这就导致了之前一直没有报错,上了一个网络较差的地方就报错了,原因分析完毕。

上面用的sockjs 0.3.4,最新的是1.0.3有所改变,但是大致相同

补充:相同个毛线,1.0.3的rtt不再是通过参数传进去的,而是计算出来的


本文来自电脑杂谈,转载请注明本文网址:
https://www.pc-fly.com/a/ruanjian/article-33265-5.html

相关阅读
    发表评论  请自觉遵守互联网相关的政策法规,严禁发布、暴力、反动的言论

    • 唐顺宗
      唐顺宗

      但这些是极少数

    • 杜树军
      杜树军

      马云个数学都考不及格的主儿随便说几句话那么就当回事来听

    • 皇太极
      皇太极

      中国人民爱好和平

    热点图片
    拼命载入中...