websocket getAsyncRemote()和getBa

2018-04-09  本文已影响0人  李望洲_3c80

 最近项目中要定时向前台web页面推送消息,便用websocket来做消息推送。

websocket  session发送文本消息有两个方法:getAsyncRemote()和getBasicRemote() 同事推荐使用getAsyncRemote()这个方法,网上找了下解释:就是getAsyncRemote是  非阻塞式   的,getBasicRemote是  阻塞式  的,表示不懂。推送消息的过程中遇到了一个bug,CSDN的一位网友正好遇到过这个bug, 于是顺便把getAsyncRemote()和getBasicRemote() 的区别给请教了一下,那位网友是这样解释的:

getAsyncRemote()和getBasicRemote()确实是异步与同步的区别,大部分情况下,推荐使用getAsyncRemote()。由于getBasicRemote()的同步特性,并且它支持部分消息的发送即sendText(xxx,boolean isLast). isLast的值表示是否一次发送消息中的部分消息,对于如下情况:

           session.getBasicRemote().sendText(message, false); 

           session.getBasicRemote().sendBinary(data);

           session.getBasicRemote().sendText(message, true); 

            由于同步特性,第二行的消息必须等待第一行的发送完成才能进行,而第一行的剩余部分消息要等第二行发送完才能继续发送,所以在第二行会抛出IllegalStateException异常。如果要使用getBasicRemote()同步发送消息,则避免尽量一次发送全部消息,使用部分消息来发送。

上一篇下一篇

猜你喜欢

热点阅读