前后端通信:关于处理前端websocket 发送消息,后端java接收不到消息的问题,多线程跳出while循环

本文探讨了在WebSocket前后端通信中,如何通过Java后端的多线程处理机制解决数据更新延迟问题。作者分享了Vue前端发送数据的策略,并详细介绍了如何利用标志位控制线程切换,确保每次请求的即时响应,避免阻塞。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

目录

1.问题

2.处理

3.方法

3.1vue前端 

3.2java后端

3.3多线程


1.问题

最近在研究websocket前后端通信问题,需要前端输入数据,后端循环返回前端对应的数据

如下图,前端输入S2,后端socket返回对应的数据

但是在处理过程中发现当我收到消息后,while(true){...获取数据,调用send(),返回前端 ...}

下一次我发送S1,后端因为还在执行上次的任务,接收不到我这次的请求参数,数据就没法更新成S1的数据

2.处理

经过思考,我将接收消息后处理数据返回前端的方法写到线程中,然后用一个标志位控制线程的关闭

这样当我下次执行的时候关闭上次的线程,开启一个新线程处理,每次请求相互不影响,就不会出现堵塞的现象,而且还是死循环的那种,哈哈哈

这个问题就涉及了利用多线程的标志位跳出while死循环的知识

3.方法

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;
    }
}

 

<think>嗯,用户让我介绍一下libwebsocket。首先,我需要回忆一下这个库的基本信息。libwebsocket是一个C语言编写的轻量级WebSocket库,主要用于实现WebSocket协议的服务器和客户端。可能用户是开发者,想要在项目中集成实时通信功能,所以需要了解这个库的特点和使用方法。 接下来,我应该考虑用户可能关心的点。比如,跨平台支持、轻量级、高性能这些特性对开发者来说很重要。另外,用户可能想知道它支持哪些协议,是否容易集成到现有项目中。还有,是否需要处理SSL/TLS加密,以及是否有社区支持和文档资源。 然后,我需要确认libwebsocket的主要功能模块,比如事件驱动模型、多线程支持、扩展协议支持等。这些技术细节对于用户评估是否适合他们的项目很关键。可能用户的应用场景是物联网设备或者需要低延迟的实时通信,这时候libwebsocket的优势就体现出来了。 另外,用户可能想知道如何开始使用这个库,所以提供一个简单的示例代码会有帮助。同时,需要提到安装方法,比如通过包管理器或者源码编译,这样用户知道从哪里入手。 还要注意用户可能的误区,比如是否需要复杂的配置,或者是否有隐藏的兼容性问题。这时候需要强调libwebsocket的轻量级和跨平台特性,以及活跃的社区支持,减少用户的顾虑。 最后,总结适用场景,帮助用户判断是否适合他们的项目。比如,嵌入式系统、实时通信应用等,这样用户能更明确是否选择这个库。</think>以下是对libwebsocket的详细介绍(按您要求的格式排版): $$ \textsf{\large libwebsocket 轻量级WebSocket库解析} $$ ### 基本特性 1. **跨平台支持** 支持Linux/Windows/macOS/Android/iOS等平台,适用于嵌入式系统(ARM/MIPS等) 2. **协议标准** 完整实现$RFC6455$ WebSocket协议规范,支持$WSS$(WebSocket Secure)加密通信 3. **性能指标** 单线程可处理$10^4$量级并发连接,内存占用控制在$KB$级别 ### 核心功能 ```c // 典型事件回调结构体示例 struct lws_protocols { const char *name; int (*callback)(struct lws *wsi, enum lws_callback_reasons reason, void *user, void *in, size_t len); }; ``` | 功能模块 | 技术实现 | |---------------|---------------------------------| | 事件驱动模型 | 基于epoll/kqueue/IOCP的异步IO | | 多线程支持 | 提供thread service API实现工作线程池 | | 扩展协议支持 | 支持MQTT、SSDP、Raw Socket等扩展协议 | ### 安装与使用 ```bash # Ubuntu安装示例 $ sudo apt-get install libwebsockets-dev ``` ```c // 最小化服务端示例 #include <libwebsockets.h> static int callback_http(struct lws *wsi, enum lws_callback_reasons reason, void *user, void *in, size_t len) { // 处理HTTP请求 return 0; } int main() { struct lws_context_creation_info info; memset(&info, 0, sizeof info); info.port = 8000; info.protocols = (struct lws_protocols[]){ { "http", callback_http, 0 }, { NULL, NULL, 0 } }; struct lws_context *context = lws_create_context(&info); while(1) { lws_service(context, 50); // 50ms超时 } lws_context_destroy(context); return 0; } ``` ### 进阶特性 1. **SSL/TLS支持** 集成$OpenSSL$或$mbedTLS$,可通过编译选项配置: ```bash cmake -DLWS_WITH_SSL=1 -DLWS_SSL_SERVER_WITH_ECDH_CERT=1 .. ``` 2. **扩展协议实现** $$ \text{WebSocket协议} \subset \text{libwebsocket支持协议集合} $$ 支持二进制帧、分片消息、ping/pong心跳检测 ### 资源支持 - 官方文档:https://libwebsockets.org - GitHub仓库:`git clone https://github.com/warmcat/libwebsockets` - 社区支持:活跃的Gitter讨论组和邮件列表 $$ \boxed{\text{适用场景:物联网设备通信/实时数据推送/低延迟控制系统}} $$
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值