零基础做项目---五子棋对战---day01

创建项目

这里使用阿里云服务器

 

https://start.aliyun.com/

勾选

  • MyBatis Framework (在SQL分类下)
  • MySQL Driver (在SQL分类下)
  • WebSocket (在Messaging分类下)
  • Spring Web (在Web分类下)

项目结构

消息发送机制

按照当前已有的知识,主要是HTTP HTTP自身是难以实现这种消息推送效果的~~
HTTP要想实现类似的效果,就需要基于“轮询”的机制~~

消息推送机制--服务器发送事件 (SSE)

我之前学习过的服务器开发,主要是这样的模型:
客户端,主动向服务器发起请求,服务器收到之后,返回一个响应。
如果客户端不主动发起请求,服务器是不能主动联系客户端的~~

这就是消息推送机制

轮询机制

     


 

 判断轮训or消息推送

很明显,像这样的轮询操作,开销是比较大的,成本也是比较高的~~

  1. 如果轮询间隔时间长,玩家1落子之后,玩家2不能及时的拿到结果.
  2. 如果轮询间隔时间短,虽然即时性得到改善,但是玩家2不得不浪费更多的机器资源(尤其是带宽)

这就类似于去餐馆吃饭~~
1.每隔1分钟,就去前台看一眼,问问老板,,我的饭好了没~~
2.我直接找个角落坐下来,玩手机~~啥时候饭做好了,老板就端过来了~~

明显方案2更好,方案2就是服务器发送事件 (SSE)

但是缺点是只支持单向通信:SSE 只支持从服务器到客户端的单向通信,不能用于双向实时通信。

因此, websocket就是实现消息推送的一个主要的方式~~

websocket介绍

需要注意的是ws => websocket,不是"猥琐”的缩写~ (滑稽)

websocket报文格式

是一个应用层协议, 下层是基于TCP的

十分显而易见, 文本帧就是传输文本数据(比如JSON格式), 二进制帧就是传输二进制数据(比如图片、文件、音频流等)

提示一下, 这里Ping帧和Pong帧通常被用作心跳包,用于检测连接的状态,确保客户端和服务器之间的连接是活跃的。

  • Ping帧:由一端(通常是服务器)发送,表示一个心跳请求。
  • Pong帧:由接收到Ping帧的另一端(通常是客户端)发送,作为回应。

通过定期发送Ping帧并接收Pong帧,可以检测到连接是否正常以及是否需要重新建立连接。

Payload len: 当前数据报文携带的数据载荷长度。

  • 这个字段本身就是一个变长的,WebSocket数据报能够承载的载荷长度是非常长的。

  • Payload data: 实际的传输数据。

websocket握手过程

websocket握手过程(建立连接的过程)
使用网页端,尝试和服务器建立websocket连接.
网页端会先给服务器发起一个HTTP请求~~这个HTTP请求中会带有特殊的header

Connection: Upgrade
Upgrade: Websocket

这两个header 其实就是在告知服务器,我们要进行协议升级,

如果服务器支持 websocket,就会返回一个特殊的HTTP响应~~这个响应的状态码是101.(切换协议)
客户端和服务器之间就开始使用 websocket来进行通信了~~

编写一个简单的websocket代码

编写服务器(Java)

TestAPI extends这个类

public class TestAPI extends TextWebSocketHandler {

看看可以重写哪些方法

 

重写这四个方法

每个添加打印到控制台的信息

新建文件WebSocketConfig

TestAPI加上注解@Component

 

编写客户端(JS)

前后端函数都是一一对应, 只不过函数方法名字不一样, 意义都是一样的

js完整代码: 

<script>// 创建websocket实例let websocket = new WebSocket("ws://127.0.0.1:8080/test");//给实例挂载一些回调函数websocket.onopen = function () {console.log("连接建立");}websocket.onclose = function () {console.log("连接关闭");}websocket.onerror = function () {console.log("出现错误");}websocket.onmessage = function (e) {console.log("收到消息 "+ e.data);}//实现点击按钮后, 通过websocket发送请求//querySelector是id选择器let input = document.querySelector("#message");let button = document.querySelector("#submit");button.onclick = function () {console.log("发送消息: "+input.value);websocket.send(input.value);}</script>

演示

访问 http://127.0.0.1:8080/TestAPI.html

连接建立

发送消息

那么如何实现服务器端也发送消息呢

@Overrideprotected void handleTextMessage(WebSocketSession session, TextMessage message) throws Exception {System.out.println("收到消息 "+ message.getPayload());session.sendMessage(message);System.out.println("发送消息 " +message.getPayload());}

只需要在

重启服务

至此, WebSocket示例已经完成

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/web/40500.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

c++ 里如何检测内存泄露:比如用了 new ,但没有用 delete

&#xff08;1 方法一&#xff09; 用 MFC 框架的 F5 不带断点的调试。可以在输出窗口提示是否有内存泄露。 &#xff08;2 方法二&#xff09; &#xff0c;在 main 函数中添加如下代码&#xff0c;用 F5 不带断点的调试&#xff1a; int main() {_CrtSetDbgFlag( _CRTDBG_A…

vue.js微商城后台管理系统

一.需要运行的效果 20240701-231456 二.代码&#xff08;解析&#xff09; 首先&#xff0c;为项目添加依赖&#xff1a; yarn add element-plus --save yarn vue-router4 --save 新建一个项目包&#xff0c;然后命名为商品管理&#xff0c;在components中新建几个vue文件。 …

C++新特性

C新特性主要体现在语法改进和标准库扩充两个方面。以下是一些主要的C新特性&#xff1a; 语法改进 统一的初始化方法&#xff1a;C11扩大了用大括号括起的列表&#xff08;初始化列表&#xff09;的使用范围&#xff0c;使其可用于所有的内置类型和用户自定义的类型。这种定义…

【C语言】指针(1)--入门理解

目录 一、内存和地址 二、指针变量和地址 三、指针变量类型的意义 一、内存和地址 只要讲指针就离不开内存 因为指针就是访问内存的 计算上CPU&#xff08;中央处理器&#xff09;在处理数据的时候&#xff0c;需要的数据是在内存中读取的&#xff0c;处理后的数 据也会放…

PY32F030高性能单片机,主频高达48M,最大64 KB 闪存,8 KB SRAM

PY32F030是普冉的一颗32位高性能MCU&#xff0c;采用32 位 ARM Cortex-M0 内核&#xff0c;高达16~64 Kbytes Flash 和 2~8 Kbytes SRAM 存储器&#xff0c;最高 48 MHz 工作频率。PY32F030 单片机的工作温度范围为 -40 ~ 105 C&#xff0c;工作电压范围为1.7 ~ 5.5 V&#xff…

多语言版在线出租车预订完整源码+用户应用程序+管理员 Laravel 面板+ 司机应用程序最新版源码

源码带PHP后台客户端源码 Flutter 是 Google 开发的一款开源移动应用开发 SDK。它用于开发 Android 和 iOS 应用&#xff0c;也是为 Google Fuchsia 创建应用的主要方法。Flutter 小部件整合了所有关键的平台差异&#xff0c;例如滚动、导航、图标和字体&#xff0c;可在 iOS 和…

DevOps实战:使用GitLab+Jenkins+Kubernetes(k8s)建立CI_CD解决方案

一.系统环境 本文主要基于Kubernetes1.21.9和Linux操作系统CentOS7.4。 服务器版本docker软件版本Kubernetes(k8s)集群版本CPU架构CentOS Linux release 7.4.1708 (Core)Docker version 20.10.12v1.21.9x86_64CI/CD解决方案架构图:CI/CD解决方案架构图描述:程序员写好代码之…

ASP.NET MVC-razor编写-2-svg中使用js+添加事件监听

环境&#xff1a;win10 效果 初始状态&#xff1a; 鼠标移入某个text&#xff08;比如KS primer&#xff09;时&#xff0c;text和连接的线条与箭头都变色&#xff1a; 鼠标移出时回复正常。 如果是移入另一种红色的text&#xff08;比如Cell Sceening Tag&#xff09;&…

创建本地仓库

一、新建挂载目录 二、将挂载本地镜像挂载到目录 三、配置yum仓库 一、新建挂载目录 mkdir /BenDiCangKu 二、将挂载本地镜像挂载到目录 1、先连接本地光盘 2、挂载光盘 mount /dev/sr0 /BenDiCangKu 3、查看挂载 由此可见挂载成功 三、配置yum仓库 1、新建yum仓库文件…

php简单商城小程序系统源码

&#x1f6cd;️【简单商城小程序】&#x1f6cd;️ &#x1f680;一键开启&#xff0c;商城搭建新体验&#x1f680; 你还在为繁琐的商城搭建流程头疼吗&#xff1f;现在&#xff0c;有了简单商城系统小程序&#xff0c;一切变得轻松又快捷&#xff01;无需复杂的编程知识&a…

构建Android studio版的CarSystemUI工程时因为包名一致导致BuildConfig问题

项目场景&#xff1a; 公司计划开发杰发AC8025-Android 12版本车载平台&#xff0c;前期预研需要构建Android studio版的CarSystemUI工程 问题描述 AAOS车载项目里面的CarSystemUI源码默认无Android studio版本&#xff0c;为了后期快速开发调试需要构建Android studio能直接…

STM32基础知识

一.STM32概述 第一款STM32单片机发布的时间为2007年6月11日。由意法半导体&#xff08;ST&#xff09;公司推出&#xff0c;是STM32系列中的首款产品&#xff0c;具体型号为STM32F1&#xff0c;它是一款基于Cortex-M内核的32位微控制器&#xff08;MCU&#xff09;。 STM32F1…

2024年【湖北省安全员-C证】考试资料及湖北省安全员-C证考试试卷

题库来源&#xff1a;安全生产模拟考试一点通公众号小程序 湖北省安全员-C证考试资料是安全生产模拟考试一点通生成的&#xff0c;湖北省安全员-C证证模拟考试题库是根据湖北省安全员-C证最新版教材汇编出湖北省安全员-C证仿真模拟考试。2024年【湖北省安全员-C证】考试资料及…

JS+CSS+HTML项目-中国国家图书馆

页面做的不多&#xff0c;CSS效果请看哔哩哔哩

英智玲珑一体机在律所能做什么

只要不开庭&#xff0c;学习就不能停 好的律师是法律知识的百科全书 要精通、全面理解各类型的法律 还要不断学习更新的条例释义 一天即使工作24小时 也有忙不完的文书起草&#xff0c;资料核对&#xff0c;案情分析整理 有了英智玲珑一体机&#xff0c;这些都不是难题&am…

一键式创建GTest测试平台

适用于C GTest测试平台搭建。直接上python脚本。 #!/usr/bin/env python3 # -*- coding: utf-8 -*-import argparse import os import platform import subprocess from xml.etree import ElementTree as ETdefault_root_path "d:\\test\\UTtest"class DeveloperTe…

四款主流电脑监控软件(电脑监控软件主要优势)

在现代企业环境中&#xff0c;确保员工的工作效率和企业信息的安全成为了管理者的重要任务。电脑监控软件作为一种有效的管理工具&#xff0c;能够帮助企业实现这些目标。固信电脑监控软件在这方面表现尤为出色&#xff0c;本文将详细介绍固信电脑监控软件的优势及其主要功能&a…

《NATURE丨使用 AlphaFold 3 准确预测生物分子相互作用的结构》

NATURE丨使用 AlphaFold 3 准确预测生物分子相互作用的结构 注意&#xff01;&#xff1a;本文创作仅根据个人理解和网络信息&#xff0c;如有错误恳请指正&#xff01;谢谢&#xff01; 大家好&#xff0c;今天分享的文献是2024年5月发表在Nature上的“ Accurate structure …

(仿真+报告+源码)基于51单片机的温湿度监测系统

&#xff08;仿真报告源码&#xff09;基于51单片机的温湿度监测系统 付费后获得百度网盘链接&#xff0c;网盘链接在最后&#xff0c;有问题私信哦~~~ 一.系统简介 该系统由单片机、温湿度传感器器、液晶显示器以及浇水控制电路组成。该系统使用AT89C51单片机作为控制核心&…

windows上安装Frida环境

python安装 下载地址 Python Release Python 3.12.4 | Python.org python安装好后&#xff0c;使用如下命令安装frida客户端 pip install frida-tools 使用frida --version 查看frida版本 安装手机模拟器&#xff08;雷电模拟器&#xff09; 我的版本是4.0.61 查看CPU架构 adb …