但是在处理过程中发现当我收到消息后,while(true){...获取数据,调用send(),返回前端 ...}
下一次我发送S1,后端因为还在执行上次的任务,接收不到我这次的请求参数,数据就没法更新成S1的数据
经过思考,我将接收消息后处理数据返回前端的方法写到线程中,然后用一个标志位控制线程的关闭
这样当我下次执行的时候关闭上次的线程,开启一个新线程处理,每次请求相互不影响,就不会出现堵塞的现象,而且还是死循环的那种,哈哈哈
这个问题就涉及了利用多线程的标志位跳出while死循环的知识
3.1vue前端
具体方法在我博客中《
Spring Boot 系列:Vue+Sping Boot +WebSocket实现前后端消息推送
》有详细记载,此处只处理问题
3.2java后端
websocket 见博客《
Spring Boot 系列:Vue+Sping Boot +WebSocket实现前后端消息推送
》
3.3多线程
package com.trgis.udp;
import com.trgis.util.UdpServerSocket;
import com.trgis.vo.SocketVO;
import java.io.IOException;
import java.util.ArrayList;
import static java.lang.Thread.sleep;
* zoe
* 多线程标志位跳出循环
public class MyRunnable implements Runnable {
//定义退出标志,true会一直执行,false会退出循环
//使用volatile目的是保证可见性,一处修改了标志,处处都要去主存读取新的值,而不是使用缓存
public volatile boolean flag = true;
public String message;
public MyRunnable(String message) {
this.message =message;
public void run() {
System.out.println("第" + Thread.currentThread().getId()+ "个线程创建");
try {
Thread.sleep(1000L);
} catch (InterruptedException e) {
e.printStackTrace();
int i=0;
//退出标志生效位置
while (flag) {
//省略处理过程
System.out.println(Thread.currentThread().getId()+"message "+message+i++);
public static void main(String[] arg) throws InterruptedException {
MyRunnable runnable = new MyRunnable("1");
//创建4个线程
for (int i = 0; i < 1; i++) {
Thread thread=new Thread(runnable,i+" ");
thread.start();
//线程休眠
Thread.sleep(2000L);
System.out.println("——————————————————————————");
//修改退出标志,使线程终止
runnable.flag = false;
基于Vue+SpringBoot+WebSocket实现Web端聊天系统+网络通信+心跳+客户端服务端+后端java+mysql
项目经过严格测试,确保可以运行!
下载代码后,先配置好yml文件:数据库和微信号appid、secret(other包下面有数据库)。启动java项目后访问 **http:127.0.0.1:1997** 即可
基于Vue+SpringBoot+WebSocket实现Web端聊天系统+网络通信+心跳+客户端服务端+后端java+mysql
项目经过严格测试,确保可以运行!
下载代码后,先配置好yml文件:数据库和微信号appid、secret(other包下面有数据库)。启动java项目后访问 **http:127.0.0.1:1997** 即可
基于Vue+SpringBoot+WebSocket实现Web端聊天系统+网络通信+心跳+客户端服务端+后端java+mysql
项目经过严格测试,确保可以运行!
下载代码后,先配置好yml文件:数据库和微信号appid、secret(other包下面有数据库)。启动java项目后访问 **http:127.0
B_clinet保存后无法发送消息到A_server
(怎么确定A_server接收不到消息忽略)
页面布局是index.html嵌套IFRAME,IFRAME页面展示书籍内容。
websocket是在index页面进行初始化,保存后在IFRAME页面直接调用websocket.send(message),子页面是无法直接调用父页面对象的。
最近在把后台Golang版的WebSocket项目修改为Java版的WebSocket项目;由于没有Golang的代码,只能自己想办法硬猜该怎么写。
在踩了一堆坑后,终于基本写完了。以下是踩坑总结与解决办法。
二、问题描述
1.前后台的WebSocket通信,传递的是字节数组(byte[]),而不是String。
2.因此,后台使用wsSession.getAsyncRemote().sendText(string)给前台发送消息的话,前台会报错,无法解析。
3.后台尝试用ByteBuffer对象
最近新写了一个Java WebSocket后台,用来和前端通信;本来前端通过js是可以成功建立WebSocket连接的,但是前端使用WebSocket发给后台的消息,后台却怎么也收不到。
以下是问题描述与解决办法。
二、问题描述
1.前端建立WebSocket连接的关键代码样例如下:
var msg="abc123";
//var imUrl="wss://10.123.123.123:9999/api/im";
var imUrl="ws://10.123.123.123:9999/api/im
将vue项目打包上线之后懵了,有两个问题,如下:1)项目中有一个充值的功能,充值成功之后提示用户充值成功,这就必然会用到websocket长连接了。但是在用户充值成功之后并不能接收到充值成功的回调,通过后台的打印数据来看,原来是由于地址名与websocket连接地址不匹配,所以造成了服务器认为是不同浏览器,又重新设置了session,导致websocket长连接的session与登录时的sessi...