基于WebSocket实现一个简易的群聊功能(二)

发布于 2022-6-16 17:48
浏览
0收藏

 

SpringBasedConfigurator

@Component
public class SpringBasedConfigurator extends ServerEndpointConfig.Configurator implements ApplicationContextAware {

    private static ApplicationContext applicationContext;

    @Override
    public void setApplicationContext(ApplicationContext applicationContext) throws BeansException {
        SpringBasedConfigurator.applicationContext = applicationContext;
    }

    @Override
    public <T> T getEndpointInstance(Class<T> clazz) throws InstantiationException {
        return applicationContext.getBean(clazz);
    }

}


这个类是继承了WebSocket包提供的api ServerEndpointConfig.Configurator ,重写了 getEndpointInstance 方法,主要是因为WebSocket是通过调用getEndpointInstance方法来获取每个连接对应调用的对象, 而getEndpointInstance方法默认是通过直接通过反射构造的,而不是从spring容器获取连接对象,导致类中的像@Resource 这类注解无法生效,所以重写了getEndpointInstance方法,让每个连接对应调用的对象都是从spring容器中获取

 

WebSocketConfiguration:配置类

@Configuration
public class WebSocketConfiguration {

    /**
     * 这个类的主要注册每个加了{@link javax.websocket.server.ServerEndpoint}的 spring bean节点,这算是spring整合websocket的一个体现
     * 具体是怎么实现注册的,可以看看 {@link ServerEndpointExporter#afterSingletonsInstantiated()}方法的实现
     *
     * @return
     */
    @Bean
    public ServerEndpointExporter serverEndpointExporter() {
        return new ServerEndpointExporter();
    }

}


暴露每个加@ServerEndpoint注解的spring bean,算是spring跟WebSocket整合的一处体现。

 

测试

 

好了,说完这些类的功能,那么开启测试吧。WebSocket客户端,我们使用https://www.idcd.com/tool/socket网站来模拟。

 

通过启动引导类来启动项目之后,我们输入  ws://localhost:8080/chat/sanyou, 建立一个连接,模拟一个客户端。

基于WebSocket实现一个简易的群聊功能(二)-开源基础软件社区

输入连接地址,点击连接,就会显示连接成功,username这里我们填sanyou,填什么都无所谓,相当于一个名字。

 

我们再建立一个连接,模拟另一个客户端。

基于WebSocket实现一个简易的群聊功能(二)-开源基础软件社区
第一个客户端就会显示这条信息。

基于WebSocket实现一个简易的群聊功能(二)-开源基础软件社区

接下来,就可以在发送栏往服务端发送消息,服务端会转给其他的客户端,实现群聊的功能,效果如下。

基于WebSocket实现一个简易的群聊功能(二)-开源基础软件社区基于WebSocket实现一个简易的群聊功能(二)-开源基础软件社区
如果还想加入群聊,另外建立连接就行了,这样,一个简易的群聊功能就完成了。

 

以上就是本篇文章的全部内容,代码我已经上传到https://github.com/sanyou3/sanyou-parent.git 仓库上了,有更详细的注释,如有需要欢迎自行clone,同时如果你有什么不懂或者想要交流的地方,欢迎关注微信公众号来联系我,我们下篇文章再见。

 

文章转自公众号:三友的java日记

标签
已于2022-6-16 17:48:18修改
收藏
回复
举报
回复
添加资源
添加资源将有机会获得更多曝光,你也可以直接关联已上传资源 去关联
    相关推荐