当前位置: 首页 > wzjs >正文

专业做企业网站百度怎么推广自己的产品

专业做企业网站,百度怎么推广自己的产品,大连建筑工程有限公司,怎么检查网站死链目录 一、JSR 356方式:简单示例 1、引入依赖 2、注册端点扫描器 3、编写通过注解处理生命周期和消息 4、细节解读 5、总结 二、聊天室案例 方案流程 1、引入依赖 2、注册端点扫描器 3、编写一个配置类,读取httpsession 4、编写通过注解处理生…

目录

一、JSR 356方式:简单示例

1、引入依赖

2、注册端点扫描器

3、编写通过注解处理生命周期和消息

4、细节解读

5、总结

二、聊天室案例

方案流程

1、引入依赖

2、注册端点扫描器

3、编写一个配置类,读取httpsession

4、编写通过注解处理生命周期和消息,并且读取到配置类

5、读取配置文件

6、OnOpen方法,获取httpsession

7、OnMessage方法        

8、OnClose方法 


        大家好,我是jstart千语。在上一篇已经讲了Spring原生底层API的实现方式,这一篇我们讲解JSR 356 标准的实现方式。


Spring原生底层API的使用方式:【webSocket协议】进阶实战案例(Spring 原生低层 API)-CSDN博客


一、JSR 356方式:简单示例

实现流程:

  1. 引入依赖
  2. 注册端点扫描器
  3. 编写通过注解处理生命周期和消息

1、引入依赖

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

2、注册端点扫描器

@Configuration
public class Jsr356Config {@Beanpublic ServerEndpointExporter serverEndpointExporter() {return new ServerEndpointExporter();  // 扫描 @ServerEndpoint 注解类}
}

3、编写通过注解处理生命周期和消息

@Component //便于后续注入spring容器的bean
@ServerEndpoint("/jsr-ws")  // 连接路径
public class Jsr356Endpoint {//注意要使用静态变量private static Map<Session, String> sessions = new ConcurrentHashMap<>();private static UserService userService;  // 静态变量解决依赖注入问题// 通过 setter 注入 Spring Bean@Autowiredpublic void setUserService(UserService userService) {Jsr356Endpoint.userService = userService;}@OnOpenpublic void onOpen(Session session) {sessions.put(session, "User-" + session.getId());}@OnMessagepublic void onMessage(Session session, String message) {userService.logMessage(message);  // 使用注入的 Beansessions.forEach((s, username) -> {s.getAsyncRemote().sendText("收到消息: " + message);});}@OnClosepublic void onClose(Session session) {sessions.remove(session);}
}

4、细节解读

  • @ServerEndpoint 注解的类由 WebSocket 容器(如 Tomcat、Jetty)直接实例化,而不是通过 Spring 容器创建。因此,Spring 的依赖注入(如 @Autowired)在普通成员变量上无法生效。
  • 由于每个 WebSocket 连接都会创建一个新的 @ServerEndpoint 实例,若想在这些实例之间共享同一个 Spring Bean(如 UserService),必须通过 ​静态变量 持有该 Bean 的引用。

实现机制:

1、​静态 set 方法:
        Spring 在启动时会扫描所有被 @Component 注解的类,并处理其中的 @Autowired 注解。通过在静态 set 方法上添加 @Autowired,Spring 会调用该方法将 Bean 注入到静态变量中。
2、​注入时机:
        Spring 在初始化 Jsr356Endpoint 类时,发现该静态 set 方法,并将 UserService Bean 赋值给静态变量。这样所有 @ServerEndpoint 实例都能共享同一个 Bean。

5、总结

  • ​静态 set 方法 + @Autowired 是为了绕过 @ServerEndpoint 类无法由 Spring 直接管理的问题,强制注入 Spring Bean。
  • 本质是一种变通方案,并非 Spring 的标准用法,需谨慎处理线程安全和初始化顺序问题。
  • 优先使用 STOMP,减少对底层 WebSocket API 的直接操作。

二、聊天室案例

方案流程

  1. 引入依赖
  2. 注册端点扫描器
  3. 编写一个配置类,读取httpsession
  4. 编写通过注解处理生命周期和消息,并且读取到配置类
  • 新用户连接到来,在open方法广播消息给聊天室其他用户
  • 用户给另一个用户发消息时,走OnMessage方法,向指定用户发送消息
  • 用户断开连接,广播消息,通知该用户下线

1、引入依赖

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


2、注册端点扫描器


3、编写一个配置类,读取httpsession


4、编写通过注解处理生命周期和消息,并且读取到配置类

这里就会在websocket通信前完成,可以从request中获取session,并且在重写方法的形参中的sec参数间接传入session,这样在后续的OnOpen、OnMessage、OnClose方法中使用到httpsession啦。


5、读取配置文件

直接在消息处理类的上面@ServerEndpoint注解里面添加一个属性,并指定要读取的配置文件即可


6、OnOpen方法,获取httpsession

可以在连接建立时,也就是OnOpen方法中,就将httpsession获取出来,然后赋值给一个类的成员变量,这样接下来的其他方法也可以共同读取了,不用反复获取httpsession。

(1)首先我们明确httpsession里面存的是什么

(2)从OnOpen的形参中获取配置文件中已经放入websocket的session的值:

(3)OnOpen完整方法(广播消息)

7、OnMessage方法        

8、OnClose方法 

http://www.dtcms.com/wzjs/228310.html

相关文章:

  • 做网站还需要买空间吗网站关键词优化排名推荐
  • 做电影解析网站百度seo关键词优化软件
  • 网站怎样上传到空间搜索引擎排名查询工具
  • 免费 支付宝购物网站模版怎么推广淘宝店铺
  • wordpress静态化教程青岛网站seo诊断
  • 深圳市住房和城乡建设厅网站网络平台推广
  • 苹果网站设计论文西地那非片说明书
  • 玉溪网站建设公司哪家好进行优化
  • wordpress 修改个人资料优化营商环境的措施建议
  • 网站建设项目总结网站建设主要推广方式
  • 天地做网站月饼营销软文
  • axure怎么做网站原型小广告模板
  • 镇江做网站需要多少钱google官网登录入口
  • 公众号电影网站怎么做自己如何制作一个网站
  • 网站建设 外包 厦门杭州优化关键词
  • 中山营销型网站建设电话销售如何快速吸引客户
  • 旅游电子商务网站建设费用东莞seo建站优化哪里好
  • 仪征建设局网站教育培训机构管理系统
  • 网站设计深圳要联系方式吗?seo资料网
  • 学会了vue 能搭建一个网站平台品牌推广软文案例
  • 望野翻译windows7优化大师官方下载
  • 网站专题页面开发男生最喜欢的浏览器
  • wordpress 图片插件seo优
  • 深圳网站建设q双赢世讯推广app大全
  • wordpress创意插件北京官网优化公司
  • 怎么用ps制作个人网站模板下载福州seo推广公司
  • 小吃加盟网站大全推广营销软件app
  • 在vs中做网站如何连接数据库搜索引擎推广与优化
  • 泉州做网站优化的公司最近的新闻大事
  • 百度创建网站百度的推广广告