一:代码结构![]() 二: pom.xml文件 <project ![]() 三: web.xml文件 ![]() 四: spring-servlet.xml文件 ![]() 五: WebSocketConfig.java文件 package com.gemdale.gmap.message.dispatch.center; import java.util.List; import org.springframework.context.annotation.Configuration; import org.springframework.messaging.converter.MessageConverter; import org.springframework.messaging.handler.invocation.HandlerMethodArgumentResolver; import org.springframework.messaging.handler.invocation.HandlerMethodReturnValueHandler; import org.springframework.messaging.simp.config.ChannelRegistration; import org.springframework.messaging.simp.config.MessageBrokerRegistry; import org.springframework.util.AntPathMatcher; import org.springframework.web.socket.config.annotation.EnableWebSocketMessageBroker; import org.springframework.web.socket.config.annotation.StompEndpointRegistry; import org.springframework.web.socket.config.annotation.WebSocketMessageBrokerConfigurer; import org.springframework.web.socket.config.annotation.WebSocketTransportRegistration; import com.gemdale.gmap.common.util.ConfigureUtil; /** * TODO: * * @author gengchong * @date 2015年10月20日 下午5:13:17 */ @Configuration @EnableWebSocketMessageBroker public class WebSocketConfig implements WebSocketMessageBrokerConfigurer { /* * 服务器要监听的端口,message会从这里进来,要对这里加一个Handler * 这样在网页中就可以通过websocket连接上服务了 */ @Override public void registerStompEndpoints(StompEndpointRegistry registry) { registry.addEndpoint("/websocket")//websocket 端点 .setAllowedOrigins("*") .setHandshakeHandler(new HandshakeHandler()) .addInterceptors(new HandshakeInterceptor()).withSockJS(); } /* * 消息传输参数配置 */ @Override public void configureWebSocketTransport(WebSocketTransportRegistration registry) { registry.setMessageSizeLimit(8192) //设置消息字节数大小 .setSendBufferSizeLimit(8192)//设置消息缓存大小 .setSendTimeLimit(10000); //设置消息发送时间限制毫秒 } /* * 输入通道参数设置 */ @Override public void configureClientInboundChannel(ChannelRegistration registration) { registration.taskExecutor().corePoolSize(4) //设置消息输入通道的线程池线程数 .maxPoolSize(8)//最大线程数 .keepAliveSeconds(60);//线程活动时间 } /* * 输出通道参数设置 */ @Override public void configureClientOutboundChannel(ChannelRegistration registration) { registration.taskExecutor().corePoolSize(4).maxPoolSize(8); } @Override public void addArgumentResolvers(List argumentResolvers) { } @Override public void addReturnValueHandlers(List returnValueHandlers) { } @Override public boolean configureMessageConverters(List messageConverters) { return true; } /* * 配置broker */ @Override public void configureMessageBroker(MessageBrokerRegistry registry) { registry.enableStompBrokerRelay("/topic") // 设置可以订阅的地址,也就是服务器可以发送的地址 .setRelayHost(ConfigureUtil.getProperty("BrokerUrl")).setRelayPort(Integer.valueOf(ConfigureUtil.getProperty("BrokerPort"))) // 设置broker的地址及端口号 .setSystemHeartbeatReceiveInterval(2000) // 设置心跳信息接收时间间隔 .setSystemHeartbeatSendInterval(2000); // 设置心跳信息发送时间间隔 registry.setApplicationDestinationPrefixes("/ws"); } } 六: HandshakeHandler.java文件 /** * TODO: * * @author gengchong * @date 2015年10月20日 下午5:02:35 */ public class HandshakeHandler extends DefaultHandshakeHandler{ private static Logger logger = Logger.getLogger(HandshakeHandler.class); } 六: HandshakeInterceptor.java文件 public class HandshakeInterceptor extends HttpSessionHandshakeInterceptor { private static Logger logger = Logger.getLogger(HandshakeInterceptor.class); @Override public boolean beforeHandshake(ServerHttpRequest request, ServerHttpResponse response, WebSocketHandler wsHandler, Map attributes) throws Exception { logger.info("============Before Handshake==========="); return super.beforeHandshake(request, response, wsHandler, attributes); } @Override public void afterHandshake(ServerHttpRequest request, ServerHttpResponse response, WebSocketHandler wsHandler, Exception ex) { logger.info("============After Handshake=============="); super.afterHandshake(request, response, wsHandler, ex); } } 七: GreetingController.java文件 public class GreetingController { @MessageMapping("/hello") @SendTo("/topic/gmapws") public Greeting greeting(HelloMessage message) { try { return new Greeting("Hello, "+message.getName() + " !"); } catch (Exception e) { e.printStackTrace(); } return null; } } 八: HelloMessage .java文件 public class HelloMessage { private String name; /** * @return the name */ public String getName() { return name; } /** * @param name the name to set */ public void setName(String name) { this.name = name; } } 九: Greeting.java文件 public class Greeting { private String content; public Greeting(String content) { this.content=content; } /** * @return the content */ public String getContent() { return content; } /** * @param content the content to set */ public void setContent(String content) { this.content = content; } } 十: index.html文件 ![]() </project |
|
来自: WindySky > 《websocket》