基于Spring boot的非常简单的WebSocket客户端与服务端通信,真心不想写Socket,用Netty写着太累,真心没多少时候需要那么好的性能。
在握手时,试着传个参数,发现没问题,整体用起来,Spring的东西很靠谱。
服务端:
import com.google.common.base.Strings; import org.springframework.boot.SpringApplication; import org.springframework.boot.autoconfigure.SpringBootApplication; import org.springframework.http.server.ServerHttpRequest; import org.springframework.http.server.ServerHttpResponse; import org.springframework.http.server.ServletServerHttpRequest; import org.springframework.stereotype.Component; import org.springframework.web.socket.TextMessage; import org.springframework.web.socket.WebSocketHandler; import org.springframework.web.socket.WebSocketSession; import org.springframework.web.socket.config.annotation.EnableWebSocket; import org.springframework.web.socket.config.annotation.WebSocketConfigurer; import org.springframework.web.socket.config.annotation.WebSocketHandlerRegistry; import org.springframework.web.socket.handler.TextWebSocketHandler; import org.springframework.web.socket.server.HandshakeInterceptor; import java.util.Map; @SpringBootApplication public class MyWebSocketServer { public static void main(String[] args) { SpringApplication.run(MyWebSocketServer.class, args); } @Component @EnableWebSocket private static class Config implements WebSocketConfigurer { @Override public void registerWebSocketHandlers(WebSocketHandlerRegistry registry) { registry.addHandler(new MyHandler(), "/ws").setAllowedOrigins("*") .addInterceptors(new MyHandshakeInterceptor()); } } private static class MyHandler extends TextWebSocketHandler { @Override public void afterConnectionEstablished(WebSocketSession session) throws Exception { System.out.println(session.getAttributes().get("collector")); super.afterConnectionEstablished(session); } @Override protected void handleTextMessage(WebSocketSession session, TextMessage message) throws Exception { System.out.println(message.getPayload()); session.sendMessage(new TextMessage("reply.................." + message.getPayload())); super.handleTextMessage(session, message); } } private static class MyHandshakeInterceptor implements HandshakeInterceptor { @Override public boolean beforeHandshake(ServerHttpRequest request, ServerHttpResponse response, WebSocketHandler wsHandler, Map<String, Object> attributes) throws Exception { String collector = ((ServletServerHttpRequest) request).getServletRequest().getParameter("collector"); if (Strings.isNullOrEmpty(collector)) { return false; } else { attributes.put("collector", collector); return true; } } @Override public void afterHandshake(ServerHttpRequest request, ServerHttpResponse response, WebSocketHandler wsHandler, Exception exception) { } } }
客户端:
import org.springframework.web.socket.TextMessage; import org.springframework.web.socket.WebSocketSession; import org.springframework.web.socket.client.WebSocketConnectionManager; import org.springframework.web.socket.client.standard.StandardWebSocketClient; import org.springframework.web.socket.handler.TextWebSocketHandler; import java.io.IOException; public class MyWebSocketClient { private static final String WS_URI = "ws://localhost:8080/ws?collector=123"; public static void main(String[] args) throws IOException, InterruptedException { StandardWebSocketClient client = new StandardWebSocketClient(); WebSocketConnectionManager manager = new WebSocketConnectionManager(client, new MyHandler(), WS_URI); manager.start(); Thread.sleep(10000); } private static class MyHandler extends TextWebSocketHandler { @Override public void afterConnectionEstablished(WebSocketSession session) throws Exception { System.out.println("connected..........."); session.sendMessage(new TextMessage("hello, web socket")); super.afterConnectionEstablished(session); } @Override protected void handleTextMessage(WebSocketSession session, TextMessage message) throws Exception { System.out.println("receive: " + message.getPayload()); super.handleTextMessage(session, message); } } }
相关推荐
spring boot 整合的netty 实现的socket的demo(包括服务端和客户端是分开的两个项目,导入idea,启动即可)。
spring_oauth客户端服务端demo代码
SpringCloud客户端服务端注册中心完整示例 搭建了一个基本的SpringCloud环境 , 供大家参考使用
spring使用web socket,spring使用web socket,spring使用web socket
Eureka 注册发现 客户端、服务端、负载 demo 微服务架构: 其可理解为讲一个完整的应用从数据存储开始垂直拆分(一般按照业务拆分)成多个不同的服务,每个服务都能够独立部署、维护、扩展,服务之间通过RESTful API的...
springclound服务端eureka和springboot客户端注册简单demo。关于Cannot execute request on any known server的解决办法
基于深度学习的新闻分类推荐系统(Spring Boot作为客户端,Keras作为服务端).zip基于深度学习的新闻分类推荐系统(Spring Boot作为客户端,Keras作为服务端).zip基于深度学习的新闻分类推荐系统(Spring Boot作为...
基于Vue+SpringBoot+WebSocket实现Web端聊天系统+网络通信+心跳+客户端服务端+后端java+mysql 项目经过严格测试,确保可以运行! 下载代码后,先配置好yml文件:数据库和微信号appid、secret(other包下面有数据库)...
绝对可运行,里面有客户端和服务端还有对应的操作文档,导入eclipse或者MyEclipse十分钟内就搞定,虽然贵点但是绝对物有所值.
使用cxf+spring框架开发webservice的客户端与服务端代码,用于连接两个项目
springboot整合netty,分客户端和服务端两个项目,springboot整合netty,分客户端和服务端两个项目,springboot整合netty,分客户端和服务端两个项目,springboot整合netty,分客户端和服务端两个项目
MinIO 是一个基于Apache License v2.0开源协议的对象存储服务。它兼容亚马逊S3云存储服务接口,非常适合于存储大容量非结构化的数据,例如图片、视频、日志文件、备份数据和...Spring boot整合MinIO客户端实现文件管理
spring上下文工具类:服务端接收客户端数据进行逻辑处理,并将处理结果响应给客户端; 运行注意事项:将test文件的192.168.8.173改为本机ip即可,服务端客户端通过1080端口通信;LampStationHisService改为需要处理...
WebService+Spring客户端和服务端程序,实现了多数据源动态切换 测试的麻油们,依次打开客户端和服务端的main方法就可以测试了
可以实现服务端-客户端高效低功耗完美双向通信 可选择使用websocket或者sockJS连接服务器,观察方便,完美观察连接全过程。
图片 文档、音视频上传下载,可供学习使用
主要给大家介绍了关于Spring Boot集成netty实现客户端服务端交互的相关资料,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧
cxf 与 Spring 结合,此例子中包含服务端和客户端, 2个工程都是与SSH 结合使用。相信对刚接触的朋友有用!
spring框架集成socket服务,监听器检测到容器启动完成,通过线程启动socket服务
使用eclipse创建spring cloud的eureka客户端和eureka服务端demo,参考地址: https://blog.csdn.net/qq_42382972/article/details/85843080