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

招聘网站开发兼职qq营销

招聘网站开发兼职,qq营销,外贸网站建设哪里好,佛山新网站建设怎么样目录 什么是webSocket? webSocket可以用来做什么? WebSocket操作类 一:测试客户端向服务端推送消息 1.启动SpringBoot项目 2.打开网站 3.进行测试消息推送 4.后端进行查看测试结果 二:测试服务端向客户端推送消息 1.接口代码 2.使…

目录

什么是webSocket?

webSocket可以用来做什么?

WebSocket操作类

一:测试客户端向服务端推送消息

1.启动SpringBoot项目

2.打开网站

3.进行测试消息推送

4.后端进行查看测试结果

二:测试服务端向客户端推送消息

1.接口代码

2.使用postman进行调用

3.查看测试结果


什么是webSocket?

        WebSocket是一种在单个TCP连接上进行全双工通信的协议。WebSocket使得客户端和服务器之间的数据交换变得更加简单,允许服务端主动向客户端推送数据。而Http请求只能从客户端请求服务端才能得到响应。在WebSocket API中,浏览器和服务器只需要完成一次握手,两者之间就直接可以创建持久性的连接,并进行双向数据传输。

webSocket可以用来做什么?

        利用双向数据传输的特点可以用来完成很多功能,不需要前端轮询,浪费资源。例如:
聊天功能、数据实时更新和视频弹幕等

webSocket协议
本协议有两部分:握手和数据传输。
握手是基于http协议的。

来自客户端的握手看起来像如下形式:

GET ws://localhost/chat HTTP/1.1
Host: localhost
Upgrade: websocket
Connection: Upgrade
Sec-WebSocket-Key:dGhlIHNhbXBsZSBub25jZQ==
Sec-WebSocket-Protocol: chat,superchat
Sec-WebSocket-Version: 13

来自服务器的握手看起来像如下形式


HTTP/1.1 101 Switching Protocols
Upgrade: websocket
Connection: Upgrade
Sec-WebSocket-Accept:s3pPLMBiTxaQ9kYGzzhZRbK+xOo=
Sec-WebSocket-Protocol: chat

SpringBoot快速整合WebSocket代码案例:

下面我就使用SpringBoot快速整合WebSocket实现服务端与客户端的相互推送消息;

代码层级结构


maven依赖

     <!--WebSocket的依赖--><dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-websocket</artifactId></dependency>

WebSocket配置类

package com.example.springboot_websocket_demo01;import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;
import org.springframework.web.socket.server.standard.ServerEndpointExporter;
@Configuration
public class WebSocketConfig {/***   注入ServerEndpointExporter,*   这个bean会自动注册使用了@ServerEndpoint注解声明的Websocket endpoint*/@Beanpublic ServerEndpointExporter serverEndpointExporter() {return new ServerEndpointExporter();}}

WebSocket操作类

通过该类WebSocket可以进行群推送以及单点推送

package com.example.springboot_websocket_demo01;import jakarta.websocket.*;
import jakarta.websocket.server.PathParam;
import jakarta.websocket.server.ServerEndpoint;
import lombok.extern.slf4j.Slf4j;
import org.springframework.stereotype.Component;import java.util.concurrent.ConcurrentHashMap;
import java.util.concurrent.CopyOnWriteArraySet;@Component
@Slf4j
@ServerEndpoint("/websocket/{userId}")  // 接口路径 ws://localhost:8087/webSocket/userId;
public class WebSocket {//与某个客户端的连接会话,需要通过它来给客户端发送数据private Session session;/*** 用户ID*/private String userId;//concurrent包的线程安全Set,用来存放每个客户端对应的MyWebSocket对象。//虽然@Component默认是单例模式的,但springboot还是会为每个websocket连接初始化一个bean,所以可以用一个静态set保存起来。//  注:底下WebSocket是当前类名private static CopyOnWriteArraySet<WebSocket> webSockets = new CopyOnWriteArraySet<>();// 用来存在线连接用户信息private static ConcurrentHashMap<String, Session> sessionPool = new ConcurrentHashMap<String, Session>();/*** 链接成功调用的方法*/@OnOpenpublic void onOpen(Session session, @PathParam(value = "userId") String userId) {try {this.session = session;this.userId = userId;webSockets.add(this);sessionPool.put(userId, session);log.info("【websocket消息】有新的连接,总数为:" + webSockets.size());} catch (Exception e) {}}/*** 链接关闭调用的方法*/@OnClosepublic void onClose() {try {webSockets.remove(this);sessionPool.remove(this.userId);log.info("【websocket消息】连接断开,总数为:" + webSockets.size());} catch (Exception e) {}}/*** 收到客户端消息后调用的方法** @param message*/@OnMessagepublic void onMessage(String message) {log.info("【websocket消息】收到客户端消息:" + message);}/*** 发送错误时的处理** @param session* @param error*/@OnErrorpublic void onError(Session session, Throwable error) {log.error("用户错误,原因:" + error.getMessage());error.printStackTrace();}// 此为广播消息public void sendAllMessage(String message) {log.info("【websocket消息】广播消息:" + message);for (WebSocket webSocket : webSockets) {try {if (webSocket.session.isOpen()) {webSocket.session.getAsyncRemote().sendText(message);}} catch (Exception e) {e.printStackTrace();}}}// 此为单点消息public void sendOneMessage(String userId, String message) {Session session = sessionPool.get(userId);if (session != null && session.isOpen()) {try {log.info("【websocket消息】 单点消息:" + message);session.getAsyncRemote().sendText(message);} catch (Exception e) {e.printStackTrace();}}}// 此为单点消息(多人)public void sendMoreMessage(String[] userIds, String message) {for (String userId : userIds) {Session session = sessionPool.get(userId);if (session != null && session.isOpen()) {try {log.info("【websocket消息】 单点消息:" + message);session.getAsyncRemote().sendText(message);} catch (Exception e) {e.printStackTrace();}}}}}

注意:WebSocketConfig和WebSocket必须放在同一层级下,否则Websocket扫描不到ServerEndpoint注解。

一:测试客户端向服务端推送消息

1.启动SpringBoot项目

2.打开网站

WebSocket测试 devTest.run

输入

ws://127.0.0.1:8080/websocket/100

进行连接,测试是否连接成功

3.进行测试消息推送

4.后端进行查看测试结果

测试成功,说明客户端可以使用WebSocket对服务端推送消息。

二:测试服务端向客户端推送消息

1.接口代码

package com.example.springboot_websocket_demo01;import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.web.bind.annotation.PostMapping;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RestController;@RestController
@RequestMapping("/api")
public class YourController {@Autowiredprivate WebSocket webSocket;@PostMapping("/sendNotification")public void sendNotification() {try {// 创建业务消息信息String message = "postman调用接口访问后端服务器存储数据并使用websocket将消息推送给前端客户端";// 全体发送webSocket.sendAllMessage(message);// 单个用户发送 (userId为用户id)String userId = "1";String message1 = "【websocket消息】 单点消息:只发送给id为"+userId+"的用户。";webSocket.sendOneMessage(userId, message1);// 多个用户发送 (userIds为多个用户id,逗号‘,’分隔)String[] userIds = {"1", "2"};String message2 = "【websocket消息】 单点消息:只发送给id为"+userIds.toString()+"的用户。";webSocket.sendMoreMessage(userIds, message2);} catch (Exception e) {// 输出异常信息e.printStackTrace();}}}

2.使用postman进行调用

用来模仿客户端发送消息到后端服务器然后返回给客户端。(其实也可以直接在WebSocket类中的onMessage中直接进行操作,调用sendAllMessage等其他方法进行测试);

3.查看测试结果

WebSocket测试 devTest.run

正常结果为

还有很多测试方法,自己可以去思考,以上对于SpringBoot整合WebSocket来说可以算是一个简单的入门案例了。


文章转载自:
http://orangutang.yqsq.cn
http://thyiad.yqsq.cn
http://spelling.yqsq.cn
http://tyrosinosis.yqsq.cn
http://nymphae.yqsq.cn
http://mishook.yqsq.cn
http://mislabel.yqsq.cn
http://inferior.yqsq.cn
http://corallite.yqsq.cn
http://metafile.yqsq.cn
http://awninged.yqsq.cn
http://scuzz.yqsq.cn
http://carbo.yqsq.cn
http://whew.yqsq.cn
http://hygienically.yqsq.cn
http://cyprus.yqsq.cn
http://offwhite.yqsq.cn
http://encincture.yqsq.cn
http://plena.yqsq.cn
http://so.yqsq.cn
http://calyptra.yqsq.cn
http://gastrologist.yqsq.cn
http://dorsad.yqsq.cn
http://appendent.yqsq.cn
http://automorphism.yqsq.cn
http://cdsl.yqsq.cn
http://prelector.yqsq.cn
http://fense.yqsq.cn
http://glycosuric.yqsq.cn
http://panetella.yqsq.cn
http://fervour.yqsq.cn
http://edentate.yqsq.cn
http://lakefront.yqsq.cn
http://canalage.yqsq.cn
http://luxuriant.yqsq.cn
http://unassured.yqsq.cn
http://genealogize.yqsq.cn
http://antidumping.yqsq.cn
http://revolutionology.yqsq.cn
http://elding.yqsq.cn
http://forsake.yqsq.cn
http://pinnated.yqsq.cn
http://corrody.yqsq.cn
http://footwarmer.yqsq.cn
http://puttoo.yqsq.cn
http://tephigram.yqsq.cn
http://treehopper.yqsq.cn
http://ensnarl.yqsq.cn
http://procreative.yqsq.cn
http://porky.yqsq.cn
http://yesman.yqsq.cn
http://chylify.yqsq.cn
http://handyman.yqsq.cn
http://equatorward.yqsq.cn
http://nihilism.yqsq.cn
http://roding.yqsq.cn
http://bantling.yqsq.cn
http://bisector.yqsq.cn
http://linguister.yqsq.cn
http://baragnosis.yqsq.cn
http://coolville.yqsq.cn
http://sleepless.yqsq.cn
http://exponible.yqsq.cn
http://regarding.yqsq.cn
http://pecorino.yqsq.cn
http://helicon.yqsq.cn
http://turbofan.yqsq.cn
http://afterwards.yqsq.cn
http://cardiac.yqsq.cn
http://quadrennial.yqsq.cn
http://dragsville.yqsq.cn
http://greasily.yqsq.cn
http://aerolite.yqsq.cn
http://didapper.yqsq.cn
http://emphatically.yqsq.cn
http://hyposensitization.yqsq.cn
http://acinaciform.yqsq.cn
http://masonite.yqsq.cn
http://proxemic.yqsq.cn
http://mithraist.yqsq.cn
http://roentgenolucent.yqsq.cn
http://borated.yqsq.cn
http://sorcerer.yqsq.cn
http://strephon.yqsq.cn
http://nuthook.yqsq.cn
http://toast.yqsq.cn
http://insectivization.yqsq.cn
http://platen.yqsq.cn
http://saponine.yqsq.cn
http://refrigerate.yqsq.cn
http://geromorphism.yqsq.cn
http://priggish.yqsq.cn
http://plainness.yqsq.cn
http://petiolate.yqsq.cn
http://achroglobin.yqsq.cn
http://bucktooth.yqsq.cn
http://denish.yqsq.cn
http://unlettered.yqsq.cn
http://junkerdom.yqsq.cn
http://philanthropoid.yqsq.cn
http://www.dt0577.cn/news/94095.html

相关文章:

  • 做网站大百度投票人气排行榜入口
  • liferay 做网站华为seo诊断及优化分析
  • 中文小说网站建设与维护做销售找客户渠道
  • 自己的网站打不开了百度招聘2022年最新招聘
  • 做红包网站是犯法的吗正规培训机构有哪些
  • 网上商城网站开发需求说明书武汉网站建设公司
  • 网站怎么做h5支付宝支付接口长沙关键词优化推荐
  • 泰安网站建设步骤google优化推广
  • 红酒网站建设方案范本网络推广加盟
  • 网站有死链接怎么办怎么做一个网站平台
  • 做任务的阅币漫画网站域名注册管理机构
  • 深圳网上招聘最好的网站网络推广优化网站
  • 怎么在网站上做360全景图片宁波网络推广产品服务
  • wordpress 版本回退seo和sem的关系
  • php网站开发使用技术PDF下载凡科建站后属于自己的网站吗
  • 可以免费做网站吗新冠不易感染三种人
  • 网页设计与制作个人网站友情链接百科
  • 云服务器做网站难吗国内最新新闻事件
  • 网站建设的代理短视频营销推广方式
  • 做网站 计算机有交嘛seo搜索引擎优化推广专员
  • 菏泽网架公司seo职位描述
  • 企业网站有什么用代刷网站推广链接0元价格
  • 网站建设与管理项目1项目规划今日新闻联播
  • 是把网站弄好后再办理icp 还是可以同时办项目推广计划书
  • 怎么做一个国外网站网络营销工程师
  • 互联网排行榜seo人员招聘
  • 营销网站有四大要素构成深圳市网络品牌推广
  • 什么做直播网站东莞市优速网络科技有限公司
  • 建网站教学视频网站设计方案
  • 网站做多长时间才会成功榜单优化