SSM+WEBSOCKET 实现单一聊天和群组聊天以及广播(附源代码)

本文介绍了如何使用SSM(Spring、SpringMVC、MyBatis)结合WEBSOCKET实现单一聊天、群组聊天和广播功能。通过对比AJAX轮询与WEBSOCKET的差异,阐述了WEBSOCKET作为主动推送的优势。提供了核心配置类WebSocketConfig和WebSocketServer的源码示例,并展示了简单的界面效果。读者可在评论区留言讨论问题。
摘要由CSDN通过智能技术生成

SSM+WEBSOCKET

SSM+WEBSOCKET 实现单一聊天和群组聊天以及广播

一、什么是WEBSOCKET?
简单来说WEBSOCKET就是一个通道,基于TCP,也基于HTTP(HTTP基于TCP),这样说可能还是不太清楚。更简单来说,就是如果服务器有信息,则主动发送给前端,客户端。和传统的方案AJAX轮询不一样的就在于主动和被动。
比较AJAX轮询和WEBSOCKET:

AJAX轮询

	 A:你有我的消息吗                           14:00:00
	 服务器:没有                                     14:00:00
	 A:你有我的消息吗						 14:00:01
	 服务器:没有									 14:00:01
	 A:你有我的消息吗                         14:00:02
	 服务器:有了,消息为HELLO           14:00:02
	 C:你有我的消息吗		                     14:00:03
	 服务器:.....我炸 ERROR					 14:00:03

WEBSOCKET

   	A:我们握手吧                                    14:00:00
   	服务器:好的,建立连接成功,有消息我会通知你的         14:00:01
   	服务器:B给你发消息了,消息为
   				"HELLO!"                             15:00:00
	 
从以上两个例子可以看出,WEBSOCKET在执行效率,已经空间利用率等方面都完爆AJAX轮询,当然曾经还有用长轮询等来实现即时通讯,当然这里我就不详细说明了。从以上WEBSOCKET的例子想必你也大概了解了WEBSOCKET的运行模式,当然这并不全面,大家可以通过源码进行底层分析。

···
二、SSM实现WEBSOCKET
有人就要问我了,你说了这么多有什么用?我要的是源码!是源码!
行吧,源码来了。
PS:这里我们是通过注解的方式来实现WEBSOCKET搭建的
WEBSOCKET 我们首先需要核心配置类
1.WebSocketConfig.class

public class WebSocketConfig implements ServerApplicationConfig{
   


    /**
     * 注解方式
     * 扫描src下所有类@ServerEndPoint注解的类。类似于
     */
    public Set<ServerEndpointConfig> getEndpointConfigs(
            Set<Class<? extends Endpoint>> scanned) {
   
        return null;
    }

    //注解的方式
    public Set<Class<?>>getAnnotatedEndpointClasses(Set<Class<?>> scanned) {
   
        System.err.println("START CONFIG:" + scanned.size());
        return scanned;
    }
}

2.WebSocketServer

import javax.websocket.OnClose;
import javax.websocket.OnMessage;
import javax.websocket.OnOpen;
import javax.websocket.Session;
import javax.websocket.server.PathParam;
import javax.websocket.server.ServerEndpoint;
import java.util.HashSet;
import java.util.Map;
import java.util.Set;
import java.util.concurrent.ConcurrentHashMap;
/*
*这里的cuttingMergeId可以理解为房间Id,
*/
@ServerEndpoint("/webSocket/chat/{cuttingMergeId}/{permId}")
public class WebSocketServer {
   
    // 使用map来收集session,key为cuttingMergeId,value为同一个房间的用户集合
    // concurrentMap的key不存在时报错,不是返回null
    private static final Map<String, Set<Session>> rooms = new ConcurrentHashMap();
    private static final Map<String, String> permIdList = new ConcurrentHashMap();
    @OnOpen
    public void connect(@P
评论 3
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值