websocket getAsyncRemote()和getBasicRemote()区别

      最近项目中要定时向前台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()同步发送消息,则避免尽量一次发送全部消息,使用部分消息来发送。

详见:https://blogs.oracle.com/PavelBucek/entry/is_websocket_session_really_thread (不过这个网页我没有打开~~)

你可能感兴趣的:(websocket)