一:代碼結(jié)構(gòu)![]() 二: 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 { /* * 服務(wù)器要監(jiān)聽的端口,message會(huì)從這里進(jìn)來(lái),要對(duì)這里加一個(gè)Handler * 這樣在網(wǎng)頁(yè)中就可以通過(guò)websocket連接上服務(wù)了 */ @Override public void registerStompEndpoints(StompEndpointRegistry registry) { registry.addEndpoint("/websocket")//websocket 端點(diǎn) .setAllowedOrigins("*") .setHandshakeHandler(new HandshakeHandler()) .addInterceptors(new HandshakeInterceptor()).withSockJS(); } /* * 消息傳輸參數(shù)配置 */ @Override public void configureWebSocketTransport(WebSocketTransportRegistration registry) { registry.setMessageSizeLimit(8192) //設(shè)置消息字節(jié)數(shù)大小 .setSendBufferSizeLimit(8192)//設(shè)置消息緩存大小 .setSendTimeLimit(10000); //設(shè)置消息發(fā)送時(shí)間限制毫秒 } /* * 輸入通道參數(shù)設(shè)置 */ @Override public void configureClientInboundChannel(ChannelRegistration registration) { registration.taskExecutor().corePoolSize(4) //設(shè)置消息輸入通道的線程池線程數(shù) .maxPoolSize(8)//最大線程數(shù) .keepAliveSeconds(60);//線程活動(dòng)時(shí)間 } /* * 輸出通道參數(shù)設(shè)置 */ @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") // 設(shè)置可以訂閱的地址,也就是服務(wù)器可以發(fā)送的地址 .setRelayHost(ConfigureUtil.getProperty("BrokerUrl")).setRelayPort(Integer.valueOf(ConfigureUtil.getProperty("BrokerPort"))) // 設(shè)置broker的地址及端口號(hào) .setSystemHeartbeatReceiveInterval(2000) // 設(shè)置心跳信息接收時(shí)間間隔 .setSystemHeartbeatSendInterval(2000); // 設(shè)置心跳信息發(fā)送時(shí)間間隔 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 |
|
|
來(lái)自: WindySky > 《websocket》