webSocket前后端使用和页面提示音

博客介绍了WebSocket客户端使用原生HTML5的实现,先通过js判断浏览器是否支持WebSocket,写出客户端事件,还提及原生页面提示音。后端方面,引入依赖,配置类交由spring管理,编写WebSocket类,单独用webSocketServer包,可按业务逻辑调用方法。

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

webSocket客户端使用原生的HTML5

首先js判断该浏览器是否支持webSocket 

var webSocket = null;
if('webSocket' in window ){

    webSocket = new WebSocket("ws://192.168.1.1/webSocket");
}else{

    alert("该浏览器不支持webSocket");
}

写出客户端事件:

 

webSocket.onopen(even){
    console.log("连接成功");
}
webSocket.onclose(){
    console.log.("关闭连接")
}
webSocket.onmessage(even){
    console.log("服务器发送来的数据:"+even.data);

      //这里作出处理  页面的弹出 提示音出现
       document.getElementById("bgm").play();
           .....
    
}

webSocket.onerror=function(){
    console.log("webSocket出现错误");
}
window.onbeforeunload=function(){
    webSocket.close();
}

原生页面提示音:

<audio id="bgm"  loop="loop">
    <source src="/mp3/xx.mp3" type="audio/mpeg"/>
</audio>

在后端:

引入依赖

<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-websocket</artifactId>
<dependency>

首先需要配置一个class交个spring管理

@Component
public class WebSocketConfig{


        @Bean
        public ServerEndpointExporter serverEndpointExporter(){
            
               return new ServerEndpointExporter();
        
        }



}

然后开始写webSocket类

这里我们单独用一个包 webSocketServer

@Component
@ServerEndpoint("/webSocket")
@Slf4j
public class WebSocket{

    private Session session ;
    
    private CopyOnWriteArraysSet<WebSocket> webSockets =  new             
                                                         CopyOnWriteArraysSet<WebSocket>();
    //开始对接前端事件  用注解 
    @OnOpen
    public void onopen(Seesion session ){
        this.session = session ; 
        webSockets.add(this);
        log.info("已经连接 连接数:{}",webSockets.size());
    }
    
    @OnClose
    punlic void onClose(){
        webSockets.remove(this);
         log.info("已经连接 连接数:{}",webSockets.size());
    }
    
    public void sendMsg(String msg){
            for(WebSocket webSocket :webSocktes){
                  try{ //为什么不抛出呢?  因为不妨碍别的进行,这个地方死可以 但调用的地方捕获的捕获的话就会整体回滚 就不好了。
                webocket.session.getBasicRemote.sendText(msg);
                log.info("[发送数据为{}]",msg);
                }catch(IOException e){
                       e.printStrackTrace();
                }       
        }


     }
    
        


}

 那么根据业务逻辑调用这个方法就可以了

### 使用 UniApp 进行前后端交互项目开发 #### 一、基础准备 对于初次接触 UniApp 的开发者来说,建议先熟悉官方文档中的基本概念、开发环境搭建以及项目创建等内容[^1]。这有助于理解框架的工作原理及其特性。 #### 二、建立通信接口 为了使前端能够与后端服务器交换数据,在UniApp应用内部通常会定义一系列API函数来发起HTTP请求。下面是一个简单的例子展示如何通过`axios`库发送GETPOST请求: ```javascript // 在 utils/request.js 中封装网络请求工具类 import axios from 'axios'; const service = axios.create({ baseURL: '/api', // API的基础URL可以根据实际情况修改 timeout: 5000, // 请求超时时间设置为5秒 }); service.interceptors.request.use( config => { const token = uni.getStorageSync('token'); // 获取本地存储的Token用于身份验证 if (token) { config.headers['Authorization'] = `Bearer ${token}`; } return config; }, error => Promise.reject(error) ); export function fetchData(params) { return service({ url: '/data', method: 'get', params, }); } export async function submitForm(data) { try { let response = await service.post('/submit', data); console.log(response.data); // 打印返回的数据 return response.data; } catch (err) { throw new Error(err.message || "提交失败"); } } ``` 此部分展示了如何利用`axios`简化跨域访问操作,并且加入了拦截器机制处理全局性的参数附加(比如认证令牌),从而提高安全性并减少重复编码工作量。 #### 三、页面逻辑编写 接下来是在具体业务场景下的页面实现方式。这里以登录界面为例说明怎样调用上述定义的服务方法完成表单提交流程: ```html <template> <view class="login-container"> <!-- 登录按钮 --> <button type="primary" @click="handleLogin">立即登录</button> <!-- QQ快捷登录入口 --> <open-data type="qq"></open-data> <!-- 需要在 manifest.json 文件里开启相应权限才能正常使用 --> <!-- 错误提示框 --> <text v-if="errorMessage">{{ errorMessage }}</text> </view> </template> <script> import { submitForm } from '@/utils/request'; export default { name: 'LoginPage', data() { return { formData: {}, errorMessage: '' }; }, methods: { handleLogin() { this.submitForm(this.formData).then(res => { // 成功后的跳转或其他动作... }).catch((error) => { this.errorMessage = error.toString(); }); } } }; </script> ``` 这段代码片段不仅实现了常规的账号密码登录功能,还集成了第三方社交平台QQ的一键登录选项[^2]。当用户点击对应图标时,系统将会自动引导至相应的授权页面;一旦获得许可,则可以直接获取到用户的公开资料而无需额外输入凭证信息。 #### 四、直播推流案例分析 除了传统的CRUD型应用程序之外,基于WebRTC技术栈构建在线音视频互动服务也是当前移动互联网领域内的热门话题之一。针对此类需求,可以参照如下架构设计思路来进行实践探索[^3]: - **客户端**: 主要负责采集媒体资源(摄像头图像、麦克风声音)、编解码转换成适合传输格式并通过WebSocket协议上传给远端节点; - **服务端**: 接收到来自不同设备发出的消息包之后再分发出去供其他订阅者接收观看;同时还需要承担信令协商职责确保两端之间建立起有效的连接通道; - **数据库层**: 记录房间状态变化历史记录以便于后期统计分析或者回放重播等功能扩展支持。 以上就是关于使用UniApp开展前后端协作项目的几个重要方面介绍,希望能够帮助读者更好地理解运用这一强大工具链解决问题!
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值