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

猪八戒上面还是淘宝上做网站技术好企业网页页面设计

猪八戒上面还是淘宝上做网站技术好,企业网页页面设计,建立微信小程序,刷赞网站怎么做的一、WebSocket介绍: WebSocket是一种在单个TCP连接上进行全双工通信的协议,旨在改进客户端和服务器之间的实时通信。以下是关于WebSocket的详细介绍: 1、定义与标准 WebSocket是独立的、创建在TCP上的协议,通过HTTP/1.1协议的10…

一、WebSocket介绍:

        WebSocket是一种在单个TCP连接上进行全双工通信的协议,旨在改进客户端和服务器之间的实时通信。以下是关于WebSocket的详细介绍:

1、定义与标准

  • WebSocket是独立的、创建在TCP上的协议,通过HTTP/1.1协议的101状态码进行握手。
  • WebSocket通信协议于2011年被IETF定为标准RFC 6455,并由RFC7936补充规范。WebSocket API也被W3C定为标准。

2、工作原理

  • WebSocket使得客户端和服务器之间的数据交换变得更加简单,允许服务端主动向客户端推送数据。
  • 在WebSocket API中,浏览器和服务器只需要完成一次握手,两者之间就直接可以创建持久性的连接,并进行双向数据传输。

3、特点

  1. 实时性:由于协议是全双工的,服务器可以随时主动给客户端下发数据,相对于HTTP请求需要等待客户端发起请求服务端才能响应,延迟明显更少。
  2. 较少的控制开销:在连接创建后,服务器和客户端之间交换数据时,用于协议控制的数据包头部相对较小。在不包含扩展的情况下,对于服务器到客户端的内容,此头部大小只有2至10字节(和数据包长度有关);对于客户端到服务器的内容,此头部还需要加上额外的4字节的掩码。
  3. 保持连接状态:与HTTP不同的是,Websocket需要先创建连接,这就使得其成为一种有状态的协议,之后通信时可以省略部分状态信息。
  4. 更好的二进制支持:Websocket定义了二进制帧,相对HTTP,可以更轻松地处理二进制内容。
  5. 跨域支持:WebSocket协议可以跨域使用,允许不同源的客户端与服务器进行通信。

4、用途

        WebSocket特别适合需要连续数据交换的服务,如网络游戏、实时交易系统、在线聊天应用、实时协作编辑、实时数据展示、在线游戏、实时地图应用、在线投票系统、实时监控系统以及实时消息推送等。

5、帧结构

        WebSocket的通信以帧为单位进行,帧的结构包括RSV1、RSV2、RSV3(默认为0,仅当使用extension扩展时,有扩展决定其值)、opcode(帧的类型)、FIN(表示消息的结尾)以及消息长度等内容。

二、WebSocket后端配置:

step1:首先是依赖下载:

        下面是一般项目的常用依赖:

<dependencies><dependency><groupId>junit</groupId><artifactId>junit</artifactId><version>4.12</version></dependency><dependency><groupId>com.alibaba</groupId><artifactId>fastjson</artifactId><version>2.0.25</version></dependency><dependency><groupId>org.apache.commons</groupId><artifactId>commons-lang3</artifactId><version>3.14.0</version></dependency><dependency><groupId>com.auth0</groupId><artifactId>java-jwt</artifactId><version>4.3.0</version></dependency><dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-websocket</artifactId></dependency><dependency><groupId>org.dom4j</groupId><artifactId>dom4j</artifactId><version>2.1.3</version></dependency><dependency><groupId>cn.hutool</groupId><artifactId>hutool-all</artifactId><version>5.8.10</version></dependency><dependency><groupId>org.projectlombok</groupId><artifactId>lombok</artifactId></dependency><dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-web</artifactId></dependency><dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-web-services</artifactId></dependency><dependency><groupId>org.mybatis.spring.boot</groupId><artifactId>mybatis-spring-boot-starter</artifactId><version>3.0.3</version></dependency><dependency><groupId>com.mysql</groupId><artifactId>mysql-connector-j</artifactId><scope>runtime</scope></dependency><dependency><groupId>org.projectlombok</groupId><artifactId>lombok</artifactId><optional>true</optional></dependency><dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-test</artifactId><scope>test</scope></dependency><dependency><groupId>org.mybatis.spring.boot</groupId><artifactId>mybatis-spring-boot-starter-test</artifactId><version>3.0.3</version><scope>test</scope></dependency><dependency><groupId>org.assertj</groupId><artifactId>assertj-core</artifactId></dependency></dependencies>

step2:然后是定义配置类:

        GetHttpSession:

package com.example.cqcrhouduan.config;import jakarta.servlet.http.HttpSession;
import jakarta.websocket.HandshakeResponse;
import jakarta.websocket.server.HandshakeRequest;
import jakarta.websocket.server.ServerEndpointConfig;public class GetHttpSession extends ServerEndpointConfig.Configurator {@Overridepublic void modifyHandshake(ServerEndpointConfig sec, HandshakeRequest request, HandshakeResponse response){// 获取httpSession对象HttpSession httpSession = (HttpSession) request.getHttpSession();// 将httpSession保存起来sec.getUserProperties().put(HttpSession.class.getName(),httpSession);}
}

        WebsocketConfig:

package com.example.cqcrhouduan.config;import jakarta.websocket.server.ServerEndpoint;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;
import org.springframework.web.socket.server.standard.ServerEndpointExporter;@Configuration
public class WebsocketConfig {@Beanpublic ServerEndpointExporter serverEndpointExporter(){return new ServerEndpointExporter();}
}

 step3:然后是定义相关工具和信息类:

        Message:

package com.example.cqcrhouduan.pojo;import lombok.AllArgsConstructor;
import lombok.Data;
import lombok.NoArgsConstructor;@Data
@AllArgsConstructor
@NoArgsConstructor
public class Message {private String toName;private String message;
}

         MessageUtil:

package com.example.cqcrhouduan.pojo;import com.alibaba.fastjson.JSON;public class MessageUtil {public static String getMessage(boolean isSystemMessage,String fromName,Object message){ResultMessage result = new ResultMessage();result.setSystem(isSystemMessage);result.setMessage(message);if(fromName != null){result.setFormName(fromName);}return JSON.toJSONString(result);}
}

        ChatEndPoint:

package com.example.cqcrhouduan.pojo;import com.alibaba.fastjson.JSON;
import com.example.cqcrhouduan.config.GetHttpSession;
import jakarta.servlet.http.HttpSession;
import jakarta.websocket.*;
import jakarta.websocket.server.ServerEndpoint;
import org.springframework.stereotype.Component;import java.util.Map;
import java.util.Set;
import java.util.concurrent.ConcurrentHashMap;@ServerEndpoint(value = "/chat",configurator = GetHttpSession.class)
@Component
public class ChatEndPoint {private  static final Map<String,Session> onlineUser = new ConcurrentHashMap<>();private  HttpSession httpSession;@OnOpenpublic void onOpen(Session session, EndpointConfig config){this.httpSession = (HttpSession) config.getUserProperties().get(HttpSession.class.getName());String user = (String) this.httpSession.getAttribute("user");// 1、将session进行保存onlineUser.put(user,session);// 2、广播消息,将所有登录的用户推送给所有的用户String message = MessageUtil.getMessage(true,null,getFriends());broadcastAllUser(message);}private void broadcastAllUser(String Message){try{// 遍历map集合Set<Map.Entry<String,Session>> entries = onlineUser.entrySet();for(Map.Entry<String,Session> entry : entries){// 获取所有用户对应的session对象Session session = entry.getValue();session.getBasicRemote().sendText(Message);}}catch (Exception e){// 记录日志等等}}public Set getFriends(){Set<String> set = onlineUser.keySet();return set;}@OnMessagepublic void opMessage(String message){try{// 将消息推送给指定的用户:Message msg = JSON.parseObject(message,Message.class);//获取 消息接收方的名称String toNmae = msg.getToName();String mes = msg.getMessage();Session session = onlineUser.get(toNmae);String user = (String) this.httpSession.getAttribute("user");String mess = MessageUtil.getMessage(false,user,mes);session.getBasicRemote().sendText(mess);}catch (Exception e){// log}}@OnClosepublic void onClose(Session session){String user = (String) this.httpSession.getAttribute("user");// 1.从onlinesUser中剔除当前用户onlineUser.remove(user);// 2.通知其它所有的用户String message = MessageUtil.getMessage(true,null,getFriends());broadcastAllUser(message);}
}

        ResultMessage:

package com.example.cqcrhouduan.pojo;import lombok.AllArgsConstructor;
import lombok.Data;
import lombok.NoArgsConstructor;@Data
@NoArgsConstructor
@AllArgsConstructor
public class ResultMessage {private  boolean System;private  String formName;private  Object Message;
}

 至此关于Socket利用session来获取信息的后端类的配置就全部完成了,后面将会继续提供前端的配置方法。<( ̄︶ ̄)>!

http://www.15wanjia.com/news/169744.html

相关文章:

  • 手机网站 后台华电集团班组建设网站
  • 网文网站外语人才网
  • 我需要把网站做廉价网站建设
  • 购物类网站建设微信公众号h5商城网站开发
  • 成都网站建设六六wordpress theme one-column
  • 炒股配资网站开发做外贸网站 深圳
  • 我想在网站做宣传怎么弄安徽建设工程信息网实名制怎么解聘
  • 做网站设计公司hilamg软件是哪家公司开发的
  • 做装饰公司网站6做拍卖网站多少钱
  • iis网站拒绝显示此网页搭建网站宣传
  • 做网站常用什么软件美食教做网站
  • 临沂网站建设wyjzgzs如何增加网站的流量
  • 网站建设推广的话术wordpress设计网页游戏
  • 大淘客网站如何建设容桂免费网站建设公司
  • 广告公司网站建设的定位wordpress网易云音乐插件
  • 做营销网站建设挣钱吗如何看织梦做的网站的源码
  • 开发一个app需要多少时间南宁seo推广外包
  • net域名做网站怎么样钢结构
  • 动漫网站建设方案项目书目录美丽寮步网站建设
  • 怎么做淘宝联盟网站推广成都网站建设熊掌号
  • 蓝色大气网站模板建网站需要准备什么
  • 网站未备案 打不开深圳网站设计x
  • 变更网站怎么做室内设计说明500字范文
  • 高端医疗网站开发上海企业营销策划
  • 做兼职网站赚钱吗电视台做网站还是APP
  • 新浦建设集团网站网站类型有
  • 大学生网站模板iis搭建网站
  • 有几家做网站的公司好网站解析记录值
  • 金融网站模板素材外贸官网建站
  • 网站制作都包括什么打开有些网站显示建设中