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

正规招聘网站有哪些wordpress灯箱图片翻页

正规招聘网站有哪些,wordpress灯箱图片翻页,定制网站建设公司排行,哪里可以免费发广告这里写自定义目录标题 一、消息推送常见方式二、websocket 是什么?三、websocket api的介绍1、客户端 (浏览器)2、服务端api 四、实现在线聊天室1、需求2、聊天室流程分析3、消息格式4、代码实现 一、消息推送常见方式 1、轮训方式 2、SSE…

这里写自定义目录标题

  • 一、消息推送常见方式
  • 二、websocket 是什么?
  • 三、websocket api的介绍
    • 1、客户端 (浏览器)
    • 2、服务端api
  • 四、实现在线聊天室
    • 1、需求
    • 2、聊天室流程分析
    • 3、消息格式
    • 4、代码实现

一、消息推送常见方式

1、轮训方式
在这里插入图片描述

2、SSE(server-send event)服务器发送事件
在这里插入图片描述

3、websocket

二、websocket 是什么?

websocket 是一种基于TCP 连接上进行全双工通信的协议
在这里插入图片描述
在这里插入图片描述

三、websocket api的介绍

1、客户端 (浏览器)

  • websocket对象创建
    在这里插入图片描述

  • websocket对象相关事件
    在这里插入图片描述

  • websocket 对象提供的方法
    在这里插入图片描述


2、服务端api

Tomcat 的7.0.5版本开始支持 websocket , 并且实现了Java websocket 规范。

Java websocket 应用由一系列的 Endpoint组成。
Endpoint 是一个java对象,代表websocket连接的一段。对于服务端,我们可以视其为处理具体websocket消息的接口

我们可以通过两种方式定义EndPoint:
编程式,继承类 javax.websocket.Endpoint 并实现其方法
注解式,定义一个pojo,并添加@ServerEndPoint相关注解

在这里插入图片描述

  • 服务端如何接收客户端发过来的数据呢?

    • 编程式
      通过添加MessageHandler消息处理器来接收消息

    • 注解式
      在定义endpoint时,通过@OnMessage 注解指定接收消息的方法

  • 服务器如何推送消息给客户端
    发送消息由RemoteEndpoint完成,其实例由Session维护。
    在这里插入图片描述
    在这里插入图片描述

四、实现在线聊天室

1、需求

通过websocket实现在线聊天室

2、聊天室流程分析

在这里插入图片描述

3、消息格式

在这里插入图片描述

4、代码实现

1) 引入依赖

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

2)编写配置类

扫描所有添加 @ServerEndpoint注解的Bean

@Configuration
public class WebsocketConfig {@Beanpublic ServerEndpointExporter serverEndpointExporter() {return new ServerEndpointExporter();}
}

编写配置类,用于获取 HttpSession 对象

public class GetHttpSessionConfig extends ServerEndpointConfig.Configurator {/*** @param sec* @param request  握手请求* @param response*/@Overridepublic void modifyHandshake(ServerEndpointConfig sec, HandshakeRequest request, HandshakeResponse response) {// 获取HttpSession对象HttpSession httpSession = (HttpSession) request.getHttpSession();// 将 HttpSession对象保存起来sec.getUserProperties().put(HttpSession.class.getName(), httpSession);}
}

在@ServerEndpoint 注解中引入配置器 @ServerEndpoint(value = “/chat”, configurator = GetHttpSessionConfig.class)

@ServerEndpoint(value = "/chat", configurator = GetHttpSessionConfig.class)
@Component
public class ChatEndpoint {/*** 使用static* ChatEndpoint是多例的,多个实例共享一个Map对象*/private static final Map<String, Session> onlineUsers = new ConcurrentHashMap<>();private HttpSession httpSession;@OnOpenpublic void onOpen(Session session, EndpointConfig endpointConfig) {this.httpSession = (HttpSession) endpointConfig.getUserProperties().get(HttpSession.class.getName());String userName = (String) httpSession.getAttribute("user");// 1、将我们的session进行保存onlineUsers.put(userName, session);// 2、广播消息,将登录的用户推送给所有的用户String message = MessageUtils.getMessage(true, null, userName + "上线");boardcast(message);// 3、}/*** 广播消息*/private void boardcast(String message) {// 遍历 map 集合Set<Map.Entry<String, Session>> entries = onlineUsers.entrySet();for (Map.Entry<String, Session> entry : entries) {Session session = entry.getValue();try {session.getBasicRemote().sendText(message);} catch (IOException e) {// 记录日志}}}/*** 浏览器发送消息到服务端,该方法会被调用*/@OnMessagepublic void onMessage(String message, EndpointConfig endpointConfig) {try {this.httpSession = (HttpSession) endpointConfig.getUserProperties().get(HttpSession.class.getName());String fromName = (String) httpSession.getAttribute("user");// 将消息推送给指定的用户   message : {"toName":"张三","message":"你好"}ClientMessage message1 = JSON.parseObject(message, ClientMessage.class);String toName = message1.getToName();Session session = onlineUsers.get(toName);String message2 = MessageUtils.getMessage(false, fromName, message1.getMessage());session.getBasicRemote().sendText(message2);} catch (IOException e) {throw new RuntimeException(e);}}/*** 当websocket连接断开时,此方法会被处罚*/@OnClosepublic void onClose(Session session, EndpointConfig endpointConfig) {// 从在线用户集合中剔除断开连接的用户this.httpSession = (HttpSession) endpointConfig.getUserProperties().get(HttpSession.class.getName());String userName = (String) httpSession.getAttribute("user");onlineUsers.remove(userName);// 通知其他用户当前用户下线String message = MessageUtils.getMessage(true, null, userName + "上线");boardcast(message);}
}
http://www.yayakq.cn/news/155585/

相关文章:

  • 电子商务网站建设步骤班级网页制作素材
  • 北京手机响应式网站建设设计下载网站备案的核验单
  • 怎么做同城商务网站网站建设及推广服务公司
  • 个人在线视频播放网站搭建做淘宝客网站用什么源码好
  • 做网站logo的网站做ppt网站动态
  • 辽宁省建设部网站wordpress 回车
  • 无锡高端网站建设开发温州建设银行网站
  • 广州网站设计制作公司网站建立流程
  • 网站建设四段合一舆情网站入口
  • 如何优化一个网站本地的沈阳网站建设
  • 养殖企业网站直接通过域名访问wordpress
  • 网站建设费需要缴纳印花税吗网站开发大概需要多久
  • 黄页网站大全唯美谷智能网站建设系统
  • php面向对象网站开发交互做的很好的网站
  • 网站名重复网站制作实验报告
  • 买东西的网站都有哪些宁波seo关键词费用
  • 网站关键字排名提升工具wordpress内涵主题
  • 宁波提高网站排名嘉兴房地产网站建设
  • 自助网站建设平台网站开发不用框架
  • 直缝钢管网站建设搭建小程序需要什么技术
  • 兴义做网站的wordpress轉移
  • 郑州企业建站系统模板全国500强企业排名
  • 专业的手机网站建设公司哪家好线上平台推广方案
  • 有关网站设计的书凡科网站可以做seo优化
  • 怎样做网站呢制作网站对话框
  • 男女直接做的视频网站免费观看在车子男女做的视频网站
  • html制作一个网站代码做网站的应用
  • 建设银行住房公积金卡网站网站后台是做什么的
  • 怎么做网站的导航条wordpress随机播放器
  • 石家庄网站建设行业公司网站开发的工资