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 (不过这个网页我没有打开~~)

  • 36
    点赞
  • 95
    收藏
    觉得还不错? 一键收藏
  • 11
    评论
### 回答1: WebSocket 和 Socket 的区别在于 WebSocket 是一种用于在单个 TCP 连接上进行全双工通信的协议,而 Socket 则是用于进行网络通信的通用接口。 WebSocket 在建立连接后,可以在单个连接上进行双向通信,而不需要对每个信息都进行 HTTP 请求。这使得 WebSocket 适用于需要实时传输大量数据的应用程序,如实时聊天、游戏、股票行情等。 Socket 则是一种通用的网络编程接口,它可以用于建立各种网络应用程序。Socket 可以使用各种协议,如 TCP、UDP 等进行通信。Socket 可以用于建立各种网络应用程序,但不一定适用于所有情况,特别是对于需要实时传输大量数据的应用程序,WebSocket 可能更为合适。 ### 回答2: WebSocket和Socket都是用于实现网络通信的协议,但在使用方式和功能上有一些区别。 首先,WebSocket是一种在Web浏览器和服务器之间进行全双工通信的协议,它可以在浏览器和服务器之间建立一个持久的连接,并且可以实现实时的数据传输。与传统的HTTP请求-响应模式不同,WebSocket是一个基于事件的协议,它允许服务器主动发送消息给客户端,而不需要客户端明确发出请求。这使得WebSocket非常适合用于实时应用程序,如实时聊天、在线游戏等。 而Socket是一种在计算机网络中进行进程间通信的一种方式,它提供了底层的网络通信功能。Socket可以用于不同计算机之间的通信,包括客户端和服务器之间的通信。在使用Socket时,通常需要编写数据收发的代码,并且需要处理网络中可能出现的各种异常。 此外,WebSocket在使用上更加简单和高级。浏览器的JavaScript提供了WebSocket的API,通过WebSocket对象可以直接进行通信,开发者无需关注底层通信细节。而Socket需要开发者自己编写Socket连接的代码和数据处理逻辑。 总结来说,WebSocket和Socket在功能和使用方式上有一定的区别WebSocket适用于Web浏览器和服务器之间的全双工实时通信,而Socket适用于不同计算机间进程间的通信,包括客户端和服务器之间的通信。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 11
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值