Spring Chapter4 WebSocket 胡乱翻译 (一) 一个例子

因为没有基础,不知道从哪里入手。

文档里的例子,https://github.com/rstoyanchev/spring-websocket-portfolio,这个除了WebSocket,还整了Security的东西(坑,版本更新导致默认的passwordEncoder不能用了,不然login一直不成功)

自己写了个乞丐版,体验一下到底怎么运行起来的。

要做啥

客户端:HTML,请求建立连接,显示接收到的消息

服务端:SpringBoot的WebSocket starter,每隔0.5秒发送一个数字

实现

客户端:

<!DOCTYPE html>
<html>

<head>
    <meta http-equiv="content-type" content="text/html;charset=utf-8">
    <title>Test WebSocket</title>
    <script>
        var ws = new WebSocket("ws://localhost:8080/myHandler");

        ws.onopen = function () {
            var ele=document.getElementById(‘wsStatus‘);
            ele.innerHTML="WebSocket状态:已连接";
        };
        // 接收服务端数据时触发事件
        ws.onmessage = function (evt) {
            var received_msg = evt.data;
            console.info(received_msg);
            var ele=document.getElementById(‘countId‘);
            ele.innerHTML="接收到:"+received_msg;
        };

        // 断开 web socket 连接成功触发事件
        ws.onclose = function () {
            var ele=document.getElementById(‘wsStatus‘);
            ele.innerHTML="WebSocket状态:已断开";
        };
    </script>
</head>

<body>
    <div>
        <h2 id="wsStatus">WebSocket状态:</h2>
    </div>
    <div >
        <h2 id="countId">接收到:</h2>
    </div>
</body>

</html>

服务端:

1. 从start.spring.io上生成一个初始的Gradle项目,依赖项加入WebSocket。

2. 根据4.2.1, 添加一个handler,每500ms发送一个数字。

package com.fzh.sbootwebsocket.handlers;

import org.springframework.web.socket.TextMessage;
import org.springframework.web.socket.WebSocketSession;
import org.springframework.web.socket.handler.TextWebSocketHandler;

public class MyHandler extends TextWebSocketHandler{
    @Override
    public void handleTextMessage(WebSocketSession session, TextMessage message){
        System.out.println("session:"+session.getId()+", Message: "+message.getPayload());
    }

    @Override
    public void afterConnectionEstablished(WebSocketSession session) throws Exception {

        for(int i=0;i<100;i++){
            TextMessage message = new TextMessage(String.valueOf(i));
            session.sendMessage(message);
            Thread.sleep(500);
        }

    }
}

3. 将handler配置到路径/myHandler。注意,setAllowedOrigins("*")这个一定要加上,要不然客户端没有响应。

package com.fzh.sbootwebsocket.config;

import com.fzh.sbootwebsocket.handlers.MyHandler;

import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;
import org.springframework.web.socket.WebSocketHandler;
import org.springframework.web.socket.config.annotation.EnableWebSocket;
import org.springframework.web.socket.config.annotation.WebSocketConfigurer;
import org.springframework.web.socket.config.annotation.WebSocketHandlerRegistry;

@Configuration
@EnableWebSocket
public class WebSocketConfig implements WebSocketConfigurer {

    @Override
    public void registerWebSocketHandlers(WebSocketHandlerRegistry registry) {
        registry.addHandler(myHandler(), "/myHandler").setAllowedOrigins("*");
    }

    @Bean
    public WebSocketHandler myHandler(){
        return new MyHandler();
    }

}

4. 命令行输入: ./gradlew bootRun

5. 用浏览器打开最开始编辑好的网页,当当当当当!

原文地址:https://www.cnblogs.com/zhsmtp/p/9716065.html

时间: 2024-10-10 09:50:51

Spring Chapter4 WebSocket 胡乱翻译 (一) 一个例子的相关文章

Spring Chapter4 WebSocket 胡乱翻译 (二)

书接上文,Spring Chapter4 WebSocket 胡乱翻译 (一) 4.4.4. 消息流 一旦暴露了STOMP端点,Spring应用程序就成为连接客户端的STOMP代理. 本节介绍服务器端的消息流. Spring-messaging模块包含对源自Spring Integration的消息传递应用程序的基础支持,后来被提取并整合到Spring Framework中,以便在许多Spring项目和应用程序场景中得到更广泛的使用. 下面列出了一些可用的消息传递抽象: Message - 包含

spring 上传文件文件的一个例子,

/** * 类名称:UploadTest 类描述:创建人:zhang 创建时间:2015年3月13日 下午4:20:57 修改人:zhang * 修改时间:2015年3月13日 下午4:20:57 修改备注: * * @version * */@Controllerpublic class UploadTest { @RequestMapping(value = "upFile", method = RequestMethod.POST) public void upFile(@Req

玩转spring boot——websocket

前言 QQ这类即时通讯工具多数是以桌面应用的方式存在.在没有websocket出现之前,如果开发一个网页版的即时通讯应用,则需要定时刷新页面或定时调用ajax请求,这无疑会加大服务器的负载和增加了客户端的流量.而websocket的出现,则完美的解决了这些问题. spring boot对websocket进行了封装,这对实现一个websocket网页即时通讯应用来说,变得非常简单. 一.准备工作 pom.xml引入 <dependency> <groupId>org.springf

Spring之WebSocket网页聊天以及服务器推送

Spring之WebSocket网页聊天以及服务器推送 转自:http://www.xdemo.org/spring-websocket-comet/ /Springframework /Spring之WebSocket网页聊天以及服务器推送 1. WebSocket protocol 是HTML5一种新的协议.它实现了浏览器与服务器全双工通信(full-duplex). 2. 轮询是在特定的的时间间隔(如每1秒),由浏览器对服务器发出HTTP request,然后由服务器返回最新的数据给客服端

spring mvc构建WEB应用程序入门例子

在使用spring mvc 构建web应用程序之前,需要了解spring mvc 的请求过程是怎样的,然后记录下如何搭建一个超简单的spring mvc例子. 1) spring mvc的请求经历 请求由DispatcherServlet分配给控制器(根据处理器映射),在控制器完成处理后,请求会被发送到一个视图(根据viewController解析逻辑视图) 来呈现输出结果. 整理成下图所示: 2)搭建一个简单的spring mvc例子 ①创建一个maven工程,其中pom中要有spring相关

使用springAPI以及自定义类 实现AOP的一个例子-aop编程

Spring的另一个重要思想是AOP,面向切面的编程,它提供了一种机制,可以在执行业务前后执行另外的代码,Servlet中的Filter就是一种AOP思想的体现,下面通过一个例子来感受一下. 假设我们现在需要在针对数据库进行CRUD操作时添加一组日志,即在执行CRUD方法前后分别加上一句话,实现简单的面向切面编程的功能.我用到的是spring4,在配置文件上较之之前的版本可能有些不同. 使用springAPI来实现AOP,除了spring必不可少的核心jar包,还需要两个jar包需要导入: as

Spring 4.x Reference翻译(一)IOC容器

1.IOC容器 本章对Spring Framework的IOC实现.IoC也就是依赖注入(DI).依赖注入的过程是这样的,对象只通过构造函数参数.工厂方法参数或者属性来定义它们的依赖:当容器创建好一个对象之后,它会注入对象定义的这些依赖.这个过程就是控制反转,因为它相对于bean自己控制实例化或自己调用依赖类的构造函数(或者使用Service Locator之类的模式)来说是相反的. 包org.springframework.beans和org.springframework.context是S

spring对websocket的集成和使用

WebSocket是HTML5提出的一个用于通信的协议规范,该协议通过一个握手机制,在客户端和服务端之间建立一个类似于TCP的连接,从而方便客户端和服务端之间的通信. WebSocket协议本质上是一个基于TCP的协议,是先通过HTTP/HTTPS协议发起一条特殊的HTTP请求进行握手后创建一个用于交换数据的TCP连接,此后服务端与客户端通过此TCP连接进行实时通信.客户端和服务端只需要要做一个握手的动作,在建立连接之后,服务端和客户端之间就可以通过此TCP连接进行实时通信. websocket

[翻译]用一个用户场景来掌握它们

翻译自一篇博文,原文:One user scenario to rule them all 异步系列 剖析C#中的异步方法 扩展C#中的异步方法 C#中异步方法的性能特点. 用一个用户场景来掌握它们 c#中异步方法的几乎所有重要行为都可以基于一个用户场景进行解释:尽可能简单地将现有的同步代码迁移到异步.你应该能在方法的返回类型前面加上async关键字,在方法名最后加上Async后缀,在方法内部加上一些await关键字,就能得到一个功能完整的异步方法. 这个"简单"场景以许多不同的方式极