Java使用WebSocket完成聊天室

本文作者:禹明明,叩丁狼高级讲师。原创文章,转载请注明出处。 

WebSocket是基于TCP的一种新的网络协议,最大的特点就是实现了浏览器与服务器全双工(full-duplex)通信,2011年WebSocket协议被接受为国际标准
HTML5开始提供WebSocket协议的支持。

什么叫全双工通讯? 其实就是通信的双方都可以主动发送消息,又可以接受消息.WebSocket协议之前,全双工通信是通过多个http链接来实现,这导致了效率低下。WebSocket的出现就是为了解决这个问题。

先说一下我们在项目中经常会遇到的一种需求:
现在很多项目都分为app 端和管理端, 经常就会有一些需求要求管理端页面能够实时的监控一些用户的动作或消息.
比如: 订单超时时,要求管理平台能够实时弹出订单超时提醒. 如果这种实时的消息推送是从服务端向app推送消息,通常使用极光推送就可以完成.
但是一般的管理端都是浏览器,而不是app,而服务器是无法主动向浏览器推送消息的。对于这种需求之前的做法就是不得不使用轮询让浏览器每隔几秒钟就向后台请求一次数据 ,但是这无疑会带来巨大的性能开销.而有了WebSocket我们就可以让服务器主动的向浏览器去推送数据了。

下边我们就使用WebSocket完成一个简单的网页聊天室小功能,来感受一下WebSocket的消息推送能力吧

测试环境:spingBoot + tomcat7 + jdk8 + chrome浏览器(个别浏览器可能不支持)

服务端:

添加WebSocket依赖:

        <!--websocket-->
        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-websocket</artifactId>
        </dependency>

配置ServerEndpointExporter

@Configuration
public class WebSocketConfig {
    @Bean
    public ServerEndpointExporter serverEndpointExporter() {
        return new ServerEndpointExporter();
    }

}

发布一个EndPoint
其中各个方法的作用都写在了注释中了

@Slf4j
@ServerEndpoint("/websocket/{userId}")
@Component
public class WebSocketServer {
    //静态变量,用来记录当前在线连接数。应该把它设计成线程安全的。
    private static int onlineCount = 0;
    //创建一个线程安全的map
    private static Map<String,WebSocketServer> users = Collections.synchronizedMap(new HashMap());

    //与某个客户端的连接会话,需要通过它来给客户端发送数据
    private Session session;
    //放入map中的key,用来表示该连接对象
    private String
  • 0
    点赞
  • 5
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值