前后端通信:关于处理前端websocket发送消息,后端java接收不到消息的问题,多线程。。。
⽬录
1.问题
最近在研究websocket前后端通信问题,需要前端输⼊数据,后端循环返回前端对应的数据
如下图,前端输⼊S2,后端socket返回对应的数据
但是在处理过程中发现当我收到消息后,while(true){...获取数据,调⽤send(),返回前端 ...}
下⼀次我发送S1,后端因为还在执⾏上次的任务,接收不到我这次的请求参数,数据就没法更新成S1的数据
2.处理
经过思考,我将接收消息后处理数据返回前端的⽅法写到线程中,然后⽤⼀个标志位控制线程的关闭
这样当我下次执⾏的时候关闭上次的线程,开启⼀个新线程处理,每次请求相互不影响,就不会出现堵塞的现象,⽽且还是死循环的那种,哈哈哈
这个问题就涉及了利⽤多线程的标志位跳出while死循环的知识
3.⽅法
3.1vue前端
具体⽅法在我博客中《》有详细记载,此处只处理问题
3.2java后端websocket 见博客《》
3.3多线程
is.udp;
is.util.UdpServerSocket;
is.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) {
}
public void run() {
System.out.println("第" + Thread.currentThread().getId()+ "个线程创建");
try {
Thread.sleep(1000L);
前端websocket怎么用} 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;
}
}
版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系QQ:729038198,我们将在24小时内删除。
发表评论