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

项目介绍:《Online ChatRoom》网页聊天室 — Spring Boot、MyBatis、MySQL和WebSocket的奇妙融合

在当今数字化社会,即时通讯已成为人们生活中不可或缺的一部分。为了满足这一需求,我开发了一个名为"WeTalk"的聊天室项目,该项目基于Spring Boot、MyBatis、MySQL和WebSocket技术,为用户提供了一个实时交流的平台。在本篇博客中,我将介绍该项目的设计和实现,以及其在社交和沟通领域的潜在价值。

文章目录

  • 前言
  • 一、pandas是什么?
  • 二、使用步骤
    • 1.引入库
    • 2.读入数据
  • 总结


1 前言:

经过29天的不懈努力和无数个代码的编织,我终于完成了这个充满挑战和激情的项目——《Online ChatRoom》网页聊天室。在这短短的时间里,我投入了大量的心血,克服了各种技术难题,经历了无数次的尝试和调试。每一行代码都承载着我对实时交流的渴望,每一次突破都充满着对创新的追求。

在这个项目中,我付出了很多,也获得了更多。我为能够创造出这个令人自豪的作品感到骄傲,也深切感受到技术的力量和创造的魅力。我希望这个《Online ChatRoom》聊天室能够为用户带来实时交流的乐趣,成为一个连接心灵的纽带。

接下来,我将带您深入了解这个项目的设计、功能和未来展望。我衷心希望您能够在阅读的过程中感受到我的努力和热情,与我一同领略这个奇妙的数字交流世界。

2 技术栈:

Spring Boot: 作为项目的核心,Spring Boot提供了快速开发和部署的环境,极大地提高了项目的效率。

MyBatis: 用于数据持久化,简化了与数据库的交互,实现了用户信息和聊天记录的存储。

MySQL: 作为数据存储,存储用户数据和聊天记录,确保数据的可靠性和一致性。

WebSocket: 通过WebSocket技术,实现了实时双向通信,用户能够实时地发送和接收消息。

3 详细设计:

"WeTalk"聊天室项目拥有一系列核心模块,包括但不限于:

3.1 用户管理模块

用户可以通过注册新账号来加入"Online ChatRoom",登录后即可进入聊天室。

具体设计:

登录界面:

3.2 个人信息模块 

在左上角显示当前用户的信息。实现页面获取到当前是哪个用户登陆的。

具体设计:

 展示界面:

 3.3 会话列表模块

左侧罗列出当前用户有哪些会话,选择某个表项, 就会在右侧消息区显⽰出历史消息

具体设计:

会话模块主要包含获取会话信息和新增会话信息:

获取会话信息:

此处和好友列表类似.也是根据当前的登录状况,来确定是获取哪个用户的会话列表的.返回出当前用户所有的会话,同时按照这些会话的最后访问时间进行降序排序.针对每个会话,都要获取到这个会话是和哪些用户产生的;

另外还需要获取到这个会话里,最后一条消息是啥(放到界面上显示的)
此处这个响应数据的格式,稍微要复杂一点.要比之前设定的一些接口都要复杂.这个响应数据的格式咋来的,就是根据当前客户端需要啥信息来的.

先根据客户端的需要,明确都想要获取哪些数据.,再根据具体的数据,来考虑服务器如何实现.

新增会话信息:
当用户点击了好友列表的某个好友的时候,此时就会触发创建会话动作.点击一个好友,触发的操作有两种情况:
1.如果会话不存在,则创建会话.

1)  需要在客户端上创建出一个对应的li标签,放到会话列表中.这个标签应该处于被选中的高亮状态,同时置顶.还要切换到会话列表标签页这里.

2)要给服务器发送一个请求。告诉服务器咱们有了个新的会话,让服务器保存这个会话的信息.
web程序都是通过服务器来持久化保存数据的.否则页面关闭/刷新数据可能就没了.

2.如果会话已经存在,则把之前的会话找到

1)把标签页切换到会话列表,找到指定的会话,置顶&设为选中状态

2)给服务器发送个请求,获取到该会话的历史消息列表,显示到右侧区域

3.4 好友列表模块

左侧罗列出当前所有的好友信息,显⽰当前⽤⼾的好友列表. 点击好友列表中的表项, 就会跳转到会话列表, 同时给会话列表新增⼀个表项. 并且提供了⼀个 "新增好友" 的按钮, 点击后跳转到新增好友⻚⾯.

具体设计:

 这里我么需要考虑两个重要问题:

1.如果用户很多,每个用户的好友很很多,这个表就会非常大,咋办?

假设你的聊天程序,有一亿用户,平均每个用户有100个好友。如何处理?分库分表!!
典型的思路:以userld进行切分,比如针对userld来计算一个hashCode (计算hashCode有很多种方式,大家不必局限于JDK里面那个比较土的计算方式)
然后再针对 hashCode进行切分~~
假设分成100张表(编号friend0 - friend99)
此时hashCode % 100 =>结果是几,就把这个记录放到第几个表里.
此时,同一个userld的记录,一定在同一张表里~
后续比如需要查询某个用户,都有哪些好友,还是按照同样的办法来查.还是先把userld按照同样的算法,算hashCode.
算出来之后,还是进行%100=>结果是几,就去第几个表里进行查询.

2.在分库分表的背景下,当前是希望,每个表大小是相对均匀的.
但是在用户中,可能会存在大V!!由于大V的好友特别特别多,就可能直接导致分表的结果并不均衡了.咋办??
具体问题,具体分析;特殊情况,特殊处理.可以针对大V的userld,单独分表(用一个特殊的表,记录下当前有哪些userld,属于大V!)再使用专门的表来保存大V的好友关系.让大V的表和普通用户的表分离开.冷热数据分环处理~~
需要注意的是:

登录成功之后,就在服务器这里创建了会话了.
会话是在服务器的内存中保存的.一旦重新启动服务器, 此时之前内存的数据就被释放了.

3.5 消息区域模块

在右侧显⽰消息区域.

最上⽅显⽰会话的名称.

中间显⽰消息内容.

下⽅显⽰⼀个输⼊框和发送按钮.

当⽤⼾点击发送按钮, 则会把输⼊框中的消息通过⽹络发送出去.

具体设计:

3.6 消息传输模块

能够真正的进行消息的发送和接收

选中好友, 则会在会话列表中⽣成⼀个会话.

点击选中会话, 会在右侧区域加载出历史消息列表.

接下来在输⼊框中输⼊消息, 点击发送按钮即可发送消息.

如果对⽅在线, 就会即刻提⽰实时消息.

如果对⽅不在线, 后续上线后就会看到历史消息

具体设计:

由于发送接收消息,需要“实时传输”,例如张三发的消息李四要能立刻感受到,但要是基于Http协议实现这样的机制很难,所以我们这里引用了WebSocket协议进行。详细介绍如下。

展示界面:

用户可以通过点击会话列表中的好友进入聊天界面,实时收发消息。消息会以气泡形式显示,用户可以快速区分发送者和接收者。

(全程尬聊hhhhhhh😅)

3.7 添加好友模块

p1:搜索并添加好友。

p2:当有好友申请发送到当前用户时,图标栏好友申请图标的加号就会变红,代表着有未处理的好友申请,点击即可查看好友申请,可以同意也可以拒绝该申请,此处我们就同意好友申请。

当我们同意好友申请之后,会默认给对方发送一个提醒,如p1

p2是申请者收到的提示

这时候新建一个用户,尝试添加好友 xby,结果如下。

 这边收到了好友请求

 同意后这时候添加成功

 就可以开始聊天了

引入WebSocket

背景介绍

WebSocket 是从 HTML5 开始⽀持的⼀种⽹⻚端和服务端保持⻓连接的 消息推送机制.

理解消息推送:

传统的 web 程序, 都是属于 "⼀问⼀答" 的形式. 客⼾端给服务器发送了⼀个 HTTP 请求, 服务器给客⼾端返回⼀个 HTTP 响应.

这种情况下, 服务器是属于被动的⼀⽅. 如果客⼾端不主动发起请求, 服务器就⽆法主动给客⼾端响应.

像聊天这样的程序, 是⾮常依赖 "消息推送" 的. 如果只是使⽤原⽣的 HTTP 协议, 要想实现消息推送⼀般需要通过 "轮询" 的⽅式.

轮询的成本⽐较⾼, ⽽且也不能及时的获取到消息的响应.

⽽ WebSocket 则是更接近于 TCP 这种级别的通信⽅式. ⼀旦连接建⽴完成, 客⼾端或者服务器都可以主动的向对⽅发送数据.

原理解析

握⼿过程

WebSocket 协议本质上是⼀个基于 TCP 的协议。为了建⽴⼀个 WebSocket 连接,客⼾端浏览器⾸先 要向服务器发起⼀个 HTTP 请求,这个请求和通常的 HTTP 请求不同,包含了⼀些附加头信息,通过这个附加头信息完成握⼿过程.

报⽂格式

 • FIN: 为 1 表⽰要断开 websocket 连接.

RSV1/RSV2/RSV3: 保留位, ⼀般为 0.

opcode: 操作代码. 决定了如何理解后⾯的数据载荷.

        ◦ 0x0: 表⽰这是个延续帧. 当 opcode 为 0, 表⽰本次数据传输采⽤了数据分⽚, 当前收到的帧为其 中⼀个分⽚.

        ◦ 0x1: 表⽰这是⽂本帧.

        ◦ 0x2: 表⽰这是⼆进制帧.

        ◦ 0x3-0x7: 保留, 暂未使⽤.

        ◦ 0x8: 表⽰连接断开.

        ◦ 0x9: 表⽰ ping 帧.

        ◦ 0xa: 表⽰ pong 帧.

        ◦ 0xb-0xf: 保留, 暂未使⽤.

mask: 表⽰是否要对数据载荷进⾏掩码操作。从客⼾端向服务端发送数据时,需要对数据进⾏掩码 操作;从服务端向客⼾端发送数据时,不需要对数据进⾏掩码操作。

Payload length:数据载荷的⻓度,单位是字节。为7位,或7+16位,或1+64位。

假设数Payload length === x,如果

x为0~126:数据的⻓度为x字节。

x为126:后续2个字节代表⼀个16位的⽆符号整数,该⽆符号整数的值为数据的⻓度。

x为127:后续8个字节代表⼀个64位的⽆符号整数(最⾼位为0),该⽆符号整数的值为数据的⻓

度。

Masking-key:0或4字节(32位)所有从客⼾端传送到服务端的数据帧,数据载荷都进⾏了掩码操作,Mask为1,且携带了4字节的Masking-key。如果Mask为0,则没有Masking-key

为啥要使⽤掩码算法?

主要是从安全⻆度考虑, 避免⼀些缓冲区溢出攻击.

payload data: 报⽂携带的载荷数据.

代码⽰例

Spring 内置了 websocket . 可以直接进⾏使⽤.

服务器代码

创建 api.TestAPI 类.

这个类⽤来处理 websocket 请求, 并返回响应.

每个⽅法中都带有⼀个 session 对象, 这个 session 和 Servlet 的 session 并不相同, ⽽是 WebSocket 内部搞的另外⼀组 Session.

通过这个 Session 可以给客⼾端返回数据, 或者主动断开连接.

 @Componentpublic class TestAPI extends TextWebSocketHandler {public TestAPI() {System.out.println("TestAPI load!");}@Overridepublic void afterConnectionEstablished(WebSocketSession session) throws ExceSystem.out.println("onOpen!");}@Overridepublic void handleTransportError(WebSocketSession session, Throwable exceptiSystem.out.println("onError!");}@Overridepublic void afterConnectionClosed(WebSocketSession session, CloseStatus statSystem.out.println("onClose!");}@Overrideprotected void handleTextMessage(WebSocketSession session, TextMessage messaSystem.out.println("onMessage: " + message.toString());session.sendMessage(message);}}

创建 config.WebSocketConfig

这个类⽤于配置 请求路径和 TextWebSocketHandler 之间的对应关系.

 @Configuration@EnableWebSocketpublic class WebSocketConfig implements WebSocketConfigurer {@Autowiredprivate TestAPI testAPI;@Overridepublic void registerWebSocketHandlers(WebSocketHandlerRegistry registry) {registry.addHandler(testAPI, "/test");}

客⼾端代码

创建 test.html

 <input type="text" id="message"><button id="sendButton">发送</button><script>let websocket = new WebSocket("ws://127.0.0.1:8080/test");websocket.onopen = function() {console.log("open!");}websocket.onclose = function() {console.log("close!");}14websocket.onerror = function() {console.log("error!");}websocket.onmessage = function(e) {console.log("recv: " + e.data);}let messageInput = document.querySelector("#message");let sendButton = document.querySelector("#sendButton");sendButton.onclick = function() {console.log("send: " + messageInput.value);websocket.send(messageInput.value);}</script>

启动服务器, 通过浏览器访问⻚⾯, 观察效果.

参考资料

https://geek-docs.com/spring/spring-tutorials/websocket.html

https://www.sohu.com/a/227600866_472869

展望:

虽然"WeTalk"聊天室项目已经拥有了基本的功能,但我们的计划绝不止于此。未来,我们将持续致力于优化用户体验,加入更多有趣实用的功能,如头像、图片、文件传输、群聊、朋友圈、自定义表情发送等,使"WeTalk"成为一个多功能、全方位的聊天平台。
我荣幸地分享,我的项目已经在腾讯云服务器上成功部署并上线。我诚挚地邀请您点击访问项目地址:WeTalkOnline ChatRoomWeTalk,感受其中的成果和体验。非常感谢您的关注与支持。

结语:

通过"Online ChatRoom"聊天室项目的设计和实现,我深刻体会到了技术的力量以及它在社交领域的积极作用。我们的目标是持续改进"Online ChatRoom",让用户能够享受到更加便捷、畅快的聊天体验。我衷心期待"Online ChatRoom"的未来,期待它能够在用户的生活中扮演越来越重要的角色。

相关文章:

项目介绍:《Online ChatRoom》网页聊天室 — Spring Boot、MyBatis、MySQL和WebSocket的奇妙融合

在当今数字化社会&#xff0c;即时通讯已成为人们生活中不可或缺的一部分。为了满足这一需求&#xff0c;我开发了一个名为"WeTalk"的聊天室项目&#xff0c;该项目基于Spring Boot、MyBatis、MySQL和WebSocket技术&#xff0c;为用户提供了一个实时交流的平台。在本…...

Vue3 学习 组合式API setup语法糖 响应式 指令 DIFF(一)

文章目录 前言一、Composition Api二、setup语法糖三、响应式refreactive 四、其他一些关键点v-prev-oncev-memov-cloak 五、虚拟Dom五、diff算法 前言 本文用于记录学习Vue3的过程 一、Composition Api 我觉得首先VUE3最大的改变就是对于代码书写的改变&#xff0c;从原来选择…...

一文轻松入门DeepSort

1.背景 Deepsort是目标检测任务的后续任务&#xff0c;得益于Yolo系列的大放异彩&#xff0c;DeepSort目标追踪任务的精度也不断提高&#xff0c;同时&#xff0c;DeepSort属于目标追踪任务中的多目标追踪&#xff0c;即MOT&#xff08;Multiple Object Tracking&#xff0c;M…...

关于linux openssl的自签证书认证与nginx配置

自签文档链接 重点注意这块&#xff0c;不能写一样的&#xff0c;要是一样的话登录界面锁会报不安全 域名这块跟最后发布的一致 nginx配置的话 server {listen 443 ssl; //ssl 说明为https 默认端口为443server_name www.skyys.com; //跟openssl设置的域名保持一致s…...

Mybatis--关联关系映射

目录&#xff1a; 1.什么是关联关系映射&#xff1a; 一对一和多对多的区别 2.mybaits中的一对一&一对多关联关系配置 配置generatoeConfig文件 插件自动生成 ​编辑 写sql语句 创建 Ordermapper类 编写接口类 ​编辑 编写接口实现类 编写测试类 测试结果 一对…...

Golang基本的网络编程

Go语言基本的Web服务器实现 Go 语言中的 http 包提供了创建 http 服务或者访问 http 服务所需要的能力&#xff0c;不需要额外的依赖。 Go语言在Web服务器中主要使用到了 “net/http” 库函数&#xff0c;通过分析请求的URL来实现参数的接收。 下面介绍了http 中Web应用的基本…...

Postgresql的一个bug_涉及归档和pg_wal

故障描述&#xff1a; 服务器ocmpgdbprod1&#xff0c;是流复制主节点&#xff0c;它的从节点是ocmpgdbprod2&#xff0c;两个节点的Postgresql数据库版本都是PostgreSQL 11.6&#xff0c;主节点ocmpgdbprod1配置了pg_wal归档&#xff0c;从节点ocmpgdbprod2没有配置pg_wal归档…...

轻量、便捷、高效—经纬恒润AETP助力车载以太网测试

随着自动驾驶技术和智能座舱的不断发展&#xff0c;高宽带、高速率的数据通信对主干网提出了稳定、高效的传输要求&#xff0c;CAN(FD)、LIN已无法充分满足汽车的通信需求。车载以太网作为一种快速且扩展性好的网络技术&#xff0c;已经逐步成为了汽车主干网的首选。 此外&…...

【跟小嘉学 Rust 编程】二十四、内联汇编(inline assembly)

系列文章目录 【跟小嘉学 Rust 编程】一、Rust 编程基础 【跟小嘉学 Rust 编程】二、Rust 包管理工具使用 【跟小嘉学 Rust 编程】三、Rust 的基本程序概念 【跟小嘉学 Rust 编程】四、理解 Rust 的所有权概念 【跟小嘉学 Rust 编程】五、使用结构体关联结构化数据 【跟小嘉学…...

综合实训-------成绩管理系统 V1.1

综合实训-------成绩管理系统 V1.1 1、一维数组数据double 2、我们用元素的位置来当学号。 1、录入数据 【5个数据】或【通过文件的方式取数据】 2、显示数据 3、添加一条记录 4、修改一条记录 5、删除一条记录 6、查找一条记录。【输入学号&#xff0c;显示成绩】 7、统计。【…...

13.108.Spark 优化、Spark优化与hive的区别、SparkSQL启动参数调优、四川任务优化实践:执行效率提升50%以上

13.108.Spark 优化 1.1.25.Spark优化与hive的区别 1.1.26.SparkSQL启动参数调优 1.1.27.四川任务优化实践&#xff1a;执行效率提升50%以上 13.108.Spark 优化&#xff1a; 1.1.25.Spark优化与hive的区别 先理解spark与mapreduce的本质区别&#xff0c;算子之间&#xff08;…...

大模型综述论文笔记6-15

这里写自定义目录标题 KeywordsBackgroud for LLMsTechnical Evolution of GPT-series ModelsResearch of OpenAI on LLMs can be roughly divided into the following stagesEarly ExplorationsCapacity LeapCapacity EnhancementThe Milestones of Language Models Resources…...

树的介绍(C语言版)

前言 在数据结构中树是一种很重要的数据结构&#xff0c;很多其他的数据结构和算法都是通过树衍生出来的&#xff0c;比如&#xff1a;堆&#xff0c;AVL树&#xff0c;红黑色等本质上都是一棵树&#xff0c;他们只是树的一种特殊结构&#xff0c;还有其他比如linux系统的文件系…...

Android studio实现圆形进度条

参考博客 效果图 MainActivity import androidx.appcompat.app.AppCompatActivity; import android.graphics.Color; import android.os.Bundle; import android.widget.TextView;import java.util.Timer; import java.util.TimerTask;public class MainActivity extends App…...

基于Halcon的喷码识别方法

具体步骤如下: 1. 读入一幅图片(彩色或黑白); 2. 将RGB图像转化为灰度图像; 3. 提取图片中的圆点特征(喷码图片中多是圆点特征),在Halcon中dots_image() 函数非常适合喷码检测; 4. 通过设定阈值,增强明显特征部分; 5. 进行一系列形态学操作(如闭运算等),将…...

【Sword系列】Vulnhub靶机HACKADEMIC: RTB1 writeup

靶机介绍 官方下载地址&#xff1a;https://www.vulnhub.com/entry/hackademic-rtb1,17/ 需要读取靶机的root目录下key.txt 运行环境&#xff1a; 虚拟机网络设置的是NAT模式 靶机&#xff1a;IP地址&#xff1a;192.168.233.131 攻击机&#xff1a;kali linux&#xff0c;IP地…...

idea使用maven时的java.lang.IllegalArgumentException: Malformed \uxxxx encoding问题解决

idea使用maven时的java.lang.IllegalArgumentException: Malformed \uxxxx encoding问题解决 欢迎使用Markdown编辑器1、使用maven clean install -X会提示报错日志2、在Poperties.java文件的这一行打上断点3、maven debug进行调试4、运行到断点位置后&#xff0c;查看报错char…...

linux深入理解多进程间通信

1.进程间通信 1.1 进程间通信目的 数据传输&#xff1a;一个进程需要将它的数据发送给另一个进程资源共享&#xff1a;多个进程之间共享同样的资源。通知事件&#xff1a;一个进程需要向另一个或一组进程发送消息&#xff0c;通知它&#xff08;它们&#xff09;发生了某种事件…...

使用自定义注解+aop实现公共字段的填充

问题描述&#xff1a;对于每个表都有cratetime,updatetime,createby,updateby字段&#xff0c;每次插入数据或者更改数据的时候&#xff0c;都需要对这几个字段进行设置。 Target(ElementType.METHOD) Retention(RetentionPolicy.RUNTIME) public interface AutoFill {//数据库…...

Unity 安卓(Android)端AVProVideo插件播放不了视频,屏幕一闪一闪的

编辑器运行没有问题&#xff0c;但是安卓就有问题&#xff0c;在平板上运行就会报错&#xff1a; vulkan graphics API is notsupported 说不支持Vulkan图形API,解决方法&#xff1a;把Vulkan删除掉...

无涯教程-JavaScript - DMIN函数

描述 DMIN函数返回列表或数据库中符合您指定条件的列中的最小数字。 语法 DMIN (database, field, criteria)争论 Argument描述Required/Optionaldatabase 组成列表或数据库的单元格范围。 数据库是相关数据的列表,其中相关信息的行是记录,数据的列是字段。列表的第一行包含…...

GaussDB数据库SQL系列-层次递归查询

目录 一、前言 二、GuassDB数据库层次递归查询概念 三、GaussDB数据库层次递归查询实验示例 1、创建实验表 2、sys_connect_by_path(col, separator) 3、connect_by_root(col) 4、WITH RECURSIVE 四、递归查询的优缺点 1、优点 2、缺点 五、总结 一、前言 层次递归…...

pycharm 下jupyter noteobook显示黑白图片不正常

背景现象&#xff1a; 1、显示一张黑白图片&#xff0c;颜色反过来了。 from IPython.display import display source Image.open(examples/images/forest_pruned.bmp) display(source) 2、原因&#xff1a; 是pycharm会在深色皮肤下默认反转jupyter notebook输出图片的颜…...

Java异常(Error与Exception)与常见异常处理——第八讲

前言 前面我们讲解了Java的基础语法以及面向对象的思想,相信大家已经基本掌握了Java的基本编程。在之前代码中,我们也看到代码写错了编译器会提示报错,或者编译器没有提示,但是运行的时候报错了,比如前面的数组查询下标超过数组的长度。所以在使用计算机语言进行项目开发的…...

【JAVA】多态

作者主页&#xff1a;paper jie_的博客 本文作者&#xff1a;大家好&#xff0c;我是paper jie&#xff0c;感谢你阅读本文&#xff0c;欢迎一建三连哦。 本文录入于《JAVASE语法系列》专栏&#xff0c;本专栏是针对于大学生&#xff0c;编程小白精心打造的。笔者用重金(时间和…...

android 12 第三方apk系统签名

需求&#xff1a;客户有两个供应商&#xff0c;我们是其中之一&#xff0c;然后客户想将我们的apk 用 另一家供应商的系统签名&#xff0c;安装到另一家供应商的设备上&#xff0c;另一家供应商提供了系统签名文件 用之前的方法 &#xff08;platform.x509.pem platform.pk8客户…...

【论文阅读】自动驾驶中车道检测系统的物理后门攻击

文章目录 Abstract1.Introduction2.Background2.1.DNN-based Lane Detection2.2.Backdoor Attacks2.3.Threat Model2.4.Image Scaling 3.Methodology3.1.Physical Trigger Design3.2.Poison-Annotation Attack3.3.Clean-Annotation Attack 4.Evaluation4.1.Poison-Annotation A…...

ArrayList、LinkedList、Collections.singletonList、Arrays.asList与ImmutableList.of

文章目录 ListArrayListLinkedListArrayList与LinkedList的区别快速构建list集合Collections.singletonListArrays.asListImmutableList.of Java集合类型有三种&#xff1a;set(集)、list(列表)和map(映射)&#xff0c;而List集合是很常用的一种集合类型&#xff0c; List 我…...

恒运资本:沪指涨逾1%,金融、地产等板块走强,北向资金净买入超60亿元

4日早盘&#xff0c;两市股指盘中强势上扬&#xff0c;沪指、深成指涨超1%&#xff0c;上证50指数涨近2%&#xff1b;两市半日成交约5500亿元&#xff0c;北向资金大举流入&#xff0c;半日净买入超60亿元。 截至午间收盘&#xff0c;沪指涨1.12%报3168.38点&#xff0c;深成指…...

解决WebSocket通信:前端拿不到最后一条数据的问题

&#x1f337;&#x1f341; 博主猫头虎&#xff08;&#x1f405;&#x1f43e;&#xff09;带您 Go to New World✨&#x1f341; &#x1f984; 博客首页——&#x1f405;&#x1f43e;猫头虎的博客&#x1f390; &#x1f433; 《面试题大全专栏》 &#x1f995; 文章图文…...

织梦采集侠官方网站/汕头网站设计公司

满意答案灏忕粷2013.11.10采纳率&#xff1a;51% 等级&#xff1a;12已帮助&#xff1a;8367人#include void print(int n) {//递归打印整数n的最后一位if(n>10) print(n/10);switch(n%10) {case 0:printf("zero ");break;case 1:printf("one ");bre…...

建筑设计公司名称/seo最新技巧

打开终端cd /java/tomcat#执行bin/startup.sh #启动tomcatbin/shutdown.sh #停止tomcattail -f logs/catalina.out #看tomcat的控制台输出&#xff1b;#看是否已经有tomcat在运行了ps -ef |grep tomcat#如果有&#xff0c;用kill;kill -9 pid #pid 为相应的进程号例如 pe -ef |…...

wordpress找回管理员密码/网站seo综合诊断

问题:java实训聊天室,空指针、内存溢出、无报错但发送信息不了-2020-6-18 一、NullPointerException(空指针): 1 不够细心&#xff0c;”:”替换成”&#xff1a;”&#xff0c;少”:”&#xff0c;导致没办法通过协议获得信息; 2 没用SWT修改ui的线程修改(书上没写全); Displ…...

苏州吴江做网站公司/南宁seo主管

在理论篇中&#xff0c;我们基本了解了DNS的整个协议原理&#xff0c;但是可能还会有着下面的疑问&#xff1a;为什么我想申请的域名都没了&#xff1f;DNS 域名还要备案&#xff0c;这是为什么啊&#xff1f;如何将刚申请的域名绑定到自己的网站呢&#xff1f;怎么才能看到那些…...

做网站开发想转行做医药销售/列举网络推广的方式

1.肉鸡&#xff1a;所谓“肉鸡”是一种很形象的比喻&#xff0c;比喻那些可以随意被我们控制的电脑&#xff0c;对方可以是WINDOWS系统&#xff0c;也可以是UNIX/LINUX系统&#xff0c;可以是普通的个人电脑&#xff0c;也可以是大型的服务器&#xff0c;我们可以象自己的电脑那…...

wordpress国内免费模板/成人短期培训能学什么

需求&#xff1a;ftp获取远程数据的文件&#xff0c;根据文件的创建时间点下载文件。 可以自行扩展根据文件的大小等其他需求。知识点总结&#xff1a;1、获取文件的时间&#xff1a;ls -lrt|awk {print $6" "$7" "$8}时间内容&#xff1a;Sep 8 16:032、…...