websocket前后端交互

摘要:
I目录websocket简介websocket客户端websocket服务器测试运行WebSocketWebSocket是HTML开始提供的浏览器和服务器之间的全双工通信网络技术,依赖于该技术和服务器的长连接、双向实时通信功能:事件驱动、异步、,使用ws或wss协议的客户端套接字可以实现真正的推送功能缺点:少数浏览器不支持它,而且浏览器支持的程度和模式不同。

一.目录

  1. websocket的简介
  2. websocket客户端
  3. websocket服务端
  4. 测试运行
    WebSocket
    WebSocket是HTML开始提供的一种浏览器与服务器间进行全双工通讯网络技术,依靠这种技术和服务器端的长连接,双向实时通讯.
    特点:事件驱动,异步,使用ws或者wss协议的客户端socket,能够实现真正意义上的推送功能
    缺点:少部分浏览器不支持,浏览器支持的程度与方式有区别。在这里插入图片描述
    . websocket客户端
    websocket允许通过Javascript建立远程服务器的连接,从而实现客户端与服务器间的双向通信,在websocket中有俩个方法
    *1.send()向远程服务器发送数据
    2.close()关闭websocket连接
    websocket同时还定义了几个监听函数    
        1、onopen 当网络连接建立时触发该事件
        2、onerror 当网络发生错误时触发该事件
        3、onclose 当websocket被关闭时触发该事件
        4、onmessage 当websocket接收到服务器发来的消息的时触发的事件,也是通信中最重要的一个监听事件。msg.data
      websocket还定义了一个readyState属性,这个属性可以返回websocket所处的状态:
        1、CONNECTING(0) websocket正尝试与服务器建立连接
        2、OPEN(1) websocket与服务器已经建立连接
        3、CLOSING(2) websocket正在关闭与服务器的连接
        4、CLOSED(3) websocket已经关闭了与服务器的连接

websocket的url开头是ws,如果需要ssl加密可以使用wss,当我们调用websocket的构造方法构建一个websocket对象(new WebSocket(url))的之后,就可以进行即时通信了。*

 <script>
        var websocket=null;
        if('WebSocket' in window){
            websocket =new WebSocket('ws://liupu33.natapp1.cc/sell/webSocket');
        }else{
            alert('该浏览器不支持websocket!');
        }
        websocket.onopen=function (event) {
            console.log('建立连接');
        }
        websocket.onclose=function (event) {
            console.log('连接关闭');
        }
        websocket.onmessage=function (event) {
            console.log('收到消息:' + event.data)
            $('#myModal').modal('show');
            document.getElementById('notice').play();
           /* document.getElementById('span1').valueOf(event.data);*/

        }
        websocket.onerror=function () {
            alert('websocket通信错误')
        }
        window.onbeforeunload=function () {
            websocket.close();
        }
    </script>

websocket服务端
引入依赖

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

配置

package com.imooc.sell.config;
import org.springframework.context.annotation.Bean;
import org.springframework.stereotype.Component;
import org.springframework.web.socket.server.standard.ServerEndpointExporter;
@Component
public class WebSocketConfig {

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


package com.imooc.sell.service;

import lombok.extern.slf4j.Slf4j;
import org.springframework.stereotype.Component;
import javax.websocket.OnClose;
import javax.websocket.OnMessage;
import javax.websocket.OnOpen;
import javax.websocket.Session;
import javax.websocket.server.ServerEndpoint;
import java.util.concurrent.CopyOnWriteArraySet;

@Component
@ServerEndpoint("/webSocket")
@Slf4j
public class WebSocket {
    private Session session;
    private static CopyOnWriteArraySet<WebSocket> webSocketSet=new CopyOnWriteArraySet<>();

    @OnOpen
    public void opOpen(Session session){
        this.session=session;
        webSocketSet.add(this);
        log.info("websocket,有新的连接,总数:{}",webSocketSet.size());
    }
    @OnClose
    public  void  onClose(){
        webSocketSet.remove(this);
        log.info("websocket,连接断开,总数:{}",webSocketSet.size());
    }
    @OnMessage
    public  void onMessage(String message){
        log.info("websocket,收到客户端发来的消息:{}",message);
    }
    public void sendMessage(String message){
        for (WebSocket webSocket :webSocketSet){
            log.info("websocket消息,广播消息,message={}",message);
            try{
                webSocket.session.getBasicRemote().sendText(message);
            } catch (Exception e){
                e.printStackTrace();
            }
        }
    }
}

测试运行
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

免责声明:文章转载自《websocket前后端交互》仅用于学习参考。如对内容有疑问,请及时联系本站处理。

上篇封装hiredis——C++与redis对接(一)(string的SET与GET操作).Net 文件名后缀的详细解释下篇

宿迁高防,2C2G15M,22元/月;香港BGP,2C5G5M,25元/月 雨云优惠码:MjYwNzM=

相关文章

Nginx反向代理WebSocket链接失败问题

问题记录:本地socket测试无误后部署发现 WebSocket connection to "xxx/xxx" failed  解决方案: 在nginx.conf的http模块添加如下内容 map $http_upgrade $connection_upgrade { default upgrade; '' close; } 其...

libevent编程疑难解答

http://blog.csdn.net/luotuo44/article/details/39547391 转载请注明出处:http://blog.csdn.net/luotuo44/article/details/39547391 正常情况下应该在libevent的回调中调用event_add函数, 如果想下其他的线程中调用event_add,是线程不...

用pygame实现打飞机游戏-2-检测键盘

1 #coding=utf-8 2 importpygame 3 #导入pygame模块 4 from pygame.locals import * 5 #导入检测键盘的子模块 6 7 if __name__ == '__main__': 8 #__name__变量,判断该模块是作为脚本被执行,还是被调用,当直接执行的时候,就是main,在被别人调用的时...

和小猪一起搞微信公众号开发—二维码创建使用流程(需要授权)

使用该接口可以获得多个带不同场景值的二维码,用户扫描后,公众号可以接收到事件推送。 目前有2种类型的二维码,分别是临时二维码和永久二维码,前者有过期时间,最大为1800秒,但能够生成较多数量,后者无过期时间,数量较少(目前参数只支持1--1000)。两种二维码分别适用于帐号绑定、用户来源统计等场景。 用户扫描带场景值二维码时,可能推送以下两种事件: 如果...

反爬虫

一、前置知识 1. 动态网页和网页源码 在爬虫领域中,静态网页与动态网页的定义与传统定义是完全不同的。 静态网页指的是网页主体内容的渲染工作在服务器端完成,并通过响应正文返回的网页。 动态网页指的是主体内容或者全部内容都需要客户端执行 JavaScript 代码来计算或渲染的网页。 网页源码,是指未经过浏览器解释和 JavaScript 引擎渲染的文本...

embOS实时操作系统 任务通讯

1. 轮询全局变量 2. 使用事件驱动 A. 信号量 (1) 二进制信号量(resource/binary semaphore)< 互斥锁 Mutex( Mutual exclusion ) > 信号量只有二进制的0或1 OS_Use() Claims a resource and blocks it for other tasks OS_Un...