瀏覽代碼

优化websocket

zhou-hao 7 年之前
父節點
當前提交
4c28c3be40
共有 16 個文件被更改,包括 35 次插入121 次删除
  1. 2 3
      hsweb-message/README.md
  2. 11 0
      hsweb-message/hsweb-message-api/pom.xml
  3. 2 3
      hsweb-message/hsweb-message-memory/src/main/java/org/hswebframework/web/message/memory/starter/MemoryMessagerAutoConfiguration.java
  4. 0 0
      hsweb-message/hsweb-message-api/src/main/java/org/hswebframework/web/message/memory/MemoryMessager.java
  5. 0 2
      hsweb-message/hsweb-message-memory/src/main/java/org/hswebframework/web/message/memory/MemoryPublish.java
  6. 0 2
      hsweb-message/hsweb-message-memory/src/main/java/org/hswebframework/web/message/memory/MemoryTopic.java
  7. 0 2
      hsweb-message/hsweb-message-memory/src/main/java/org/hswebframework/web/message/memory/MemoryTopicSubscribe.java
  8. 1 1
      hsweb-message/hsweb-message-memory/src/main/resources/META-INF/spring.factories
  9. 0 26
      hsweb-message/hsweb-message-memory/pom.xml
  10. 0 52
      hsweb-message/hsweb-message-memory/src/test/java/org/hswebframework/web/message/memory/MemoryMessagerTest.java
  11. 10 16
      hsweb-message/hsweb-message-websocket/pom.xml
  12. 3 0
      hsweb-message/hsweb-message-websocket/src/main/java/org/hswebframework/web/socket/handler/CommandWebSocketMessageDispatcher.java
  13. 3 3
      hsweb-message/hsweb-message-websocket/src/main/java/org/hswebframework/web/socket/message/DefaultWebSocketMessager.java
  14. 3 3
      hsweb-message/hsweb-message-websocket/src/main/java/org/hswebframework/web/socket/starter/CommandWebSocketAutoConfiguration.java
  15. 0 4
      hsweb-message/hsweb-message-websocket/src/test/java/org/hswebframework/web/socket/TestProcessor.java
  16. 0 4
      hsweb-message/hsweb-message-websocket/src/test/java/org/hswebframework/web/socket/WebSocketServerTests.java

+ 2 - 3
hsweb-message/README.md

@@ -2,9 +2,8 @@
 
 1. [hsweb-message-api](hsweb-message-api) API
 2. [hsweb-message-jms](hsweb-message-jms) JMS实现
-3. [hsweb-message-memory](hsweb-message-memory) 内存实现
-4. [hsweb-message-redis](hsweb-message-redis) Redis实现(redisson)
-5. [hsweb-message-websocket](hsweb-message-websocket) 使用websocket进行消息推送
+3. [hsweb-message-redis](hsweb-message-redis) Redis实现(redisson)
+4. [hsweb-message-websocket](hsweb-message-websocket) 使用websocket进行消息推送
 
 
 ## API

+ 11 - 0
hsweb-message/hsweb-message-api/pom.xml

@@ -11,4 +11,15 @@
 
     <artifactId>hsweb-message-api</artifactId>
 
+    <dependencies>
+        <dependency>
+            <groupId>org.springframework.boot</groupId>
+            <artifactId>spring-boot-starter</artifactId>
+            <optional>true</optional>
+        </dependency>
+        <dependency>
+            <groupId>org.slf4j</groupId>
+            <artifactId>slf4j-api</artifactId>
+        </dependency>
+    </dependencies>
 </project>

+ 2 - 3
hsweb-message/hsweb-message-memory/src/main/java/org/hswebframework/web/message/memory/starter/MemoryMessagerAutoConfiguration.java

@@ -1,6 +1,5 @@
-package org.hswebframework.web.message.memory.starter;
+package org.hswebframework.web.message;
 
-import org.hswebframework.web.message.Messager;
 import org.hswebframework.web.message.memory.MemoryMessager;
 import org.springframework.boot.autoconfigure.condition.ConditionalOnMissingBean;
 import org.springframework.context.annotation.Bean;
@@ -13,7 +12,7 @@ import org.springframework.context.annotation.Configuration;
  */
 @Configuration
 @ConditionalOnMissingBean(Messager.class)
-public class MemoryMessagerAutoConfiguration {
+public class MessagerAutoConfiguration {
     @Bean
     public Messager messager() {
         return new MemoryMessager();

hsweb-message/hsweb-message-memory/src/main/java/org/hswebframework/web/message/memory/MemoryMessager.java → hsweb-message/hsweb-message-api/src/main/java/org/hswebframework/web/message/memory/MemoryMessager.java


+ 0 - 2
hsweb-message/hsweb-message-memory/src/main/java/org/hswebframework/web/message/memory/MemoryPublish.java

@@ -13,8 +13,6 @@ import java.util.concurrent.TimeUnit;
 import java.util.function.Function;
 
 /**
- * TODO 完成注释
- *
  * @author zhouhao
  */
 public class MemoryPublish implements MessagePublish {

+ 0 - 2
hsweb-message/hsweb-message-memory/src/main/java/org/hswebframework/web/message/memory/MemoryTopic.java

@@ -9,8 +9,6 @@ import java.util.concurrent.ConcurrentHashMap;
 import java.util.function.Consumer;
 
 /**
- * TODO 完成注释
- *
  * @author zhouhao
  */
 class MemoryTopic<M extends Message> {

+ 0 - 2
hsweb-message/hsweb-message-memory/src/main/java/org/hswebframework/web/message/memory/MemoryTopicSubscribe.java

@@ -7,8 +7,6 @@ import java.util.UUID;
 import java.util.function.Consumer;
 
 /**
- * TODO 完成注释
- *
  * @author zhouhao
  */
 public class MemoryTopicSubscribe<M extends Message> implements MessageSubscribe<M> {

+ 1 - 1
hsweb-message/hsweb-message-memory/src/main/resources/META-INF/spring.factories

@@ -1,3 +1,3 @@
 # Auto Configure
 org.springframework.boot.autoconfigure.EnableAutoConfiguration=\
-org.hswebframework.web.message.memory.starter.MemoryMessagerAutoConfiguration
+org.hswebframework.web.message.MessagerAutoConfiguration

+ 0 - 26
hsweb-message/hsweb-message-memory/pom.xml

@@ -1,26 +0,0 @@
-<?xml version="1.0" encoding="UTF-8"?>
-<project xmlns="http://maven.apache.org/POM/4.0.0"
-         xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
-         xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
-    <parent>
-        <artifactId>hsweb-message</artifactId>
-        <groupId>org.hswebframework.web</groupId>
-        <version>3.0-SNAPSHOT</version>
-    </parent>
-    <modelVersion>4.0.0</modelVersion>
-
-    <artifactId>hsweb-message-memory</artifactId>
-
-    <dependencies>
-        <dependency>
-            <groupId>org.springframework.boot</groupId>
-            <artifactId>spring-boot-starter</artifactId>
-            <optional>true</optional>
-        </dependency>
-        <dependency>
-            <groupId>org.hswebframework.web</groupId>
-            <artifactId>hsweb-message-api</artifactId>
-            <version>${project.version}</version>
-        </dependency>
-    </dependencies>
-</project>

+ 0 - 52
hsweb-message/hsweb-message-memory/src/test/java/org/hswebframework/web/message/memory/MemoryMessagerTest.java

@@ -1,52 +0,0 @@
-package org.hswebframework.web.message.memory;
-
-import org.hswebframework.web.message.MessageSubscribe;
-import org.hswebframework.web.message.Messager;
-import org.hswebframework.web.message.support.TextMessage;
-import org.junit.Test;
-
-import static org.hswebframework.web.message.builder.StaticMessageBuilder.text;
-import static org.hswebframework.web.message.builder.StaticMessageSubjectBuilder.queue;
-import static org.hswebframework.web.message.builder.StaticMessageSubjectBuilder.topic;
-
-/**
- * TODO 完成注释
- *
- * @author zhouhao
- */
-public class MemoryMessagerTest {
-
-    private Messager messager = new MemoryMessager();
-
-    @Test
-    public void testQueue() throws InterruptedException {
-        for (int i = 0; i < 5; i++) {
-            int x = i;
-            MessageSubscribe<TextMessage> sub = messager.subscribe(queue("test"));
-            sub.onMessage(msg -> System.out.println(x + msg.getMessage()));
-        }
-        for (int i = 0; i < 10; i++) {
-            Thread.sleep(200);
-            messager.publish(text("hello queue" + i))
-                    .to(queue("test")).send();
-        }
-
-        Thread.sleep(1000);
-    }
-
-    @Test
-    public void testTopic() throws InterruptedException {
-        for (int i = 0; i < 5; i++) {
-            int x = i;
-            MessageSubscribe<TextMessage> sub = messager.subscribe(topic("test"));
-            sub.onMessage(msg -> System.out.println(x + msg.getMessage()));
-        }
-        for (int i = 0; i < 10; i++) {
-            Thread.sleep(200);
-            messager.publish(text("hello queue" + i))
-                    .to(topic("test")).send();
-        }
-
-        Thread.sleep(1000);
-    }
-}

+ 10 - 16
hsweb-message/hsweb-message-websocket/pom.xml

@@ -19,12 +19,6 @@
             <version>${project.version}</version>
             <scope>test</scope>
         </dependency>
-        <dependency>
-            <groupId>org.hswebframework.web</groupId>
-            <artifactId>hsweb-message-memory</artifactId>
-            <version>${project.version}</version>
-            <scope>test</scope>
-        </dependency>
 
         <!--<dependency>-->
             <!--<groupId>org.hswebframework.web</groupId>-->
@@ -59,19 +53,19 @@
         <dependency>
             <groupId>org.springframework.boot</groupId>
             <artifactId>spring-boot-starter-websocket</artifactId>
-            <exclusions>
-                <exclusion>
-                    <groupId>org.springframework.boot</groupId>
-                    <artifactId>spring-boot-starter-tomcat</artifactId>
-                </exclusion>
-            </exclusions>
+            <!--<exclusions>-->
+                <!--<exclusion>-->
+                    <!--<groupId>org.springframework.boot</groupId>-->
+                    <!--<artifactId>spring-boot-starter-tomcat</artifactId>-->
+                <!--</exclusion>-->
+            <!--</exclusions>-->
         </dependency>
 
         <!--使用undertow作为web容器-->
-        <dependency>
-            <groupId>org.springframework.boot</groupId>
-            <artifactId>spring-boot-starter-undertow</artifactId>
-        </dependency>
+        <!--<dependency>-->
+            <!--<groupId>org.springframework.boot</groupId>-->
+            <!--<artifactId>spring-boot-starter-undertow</artifactId>-->
+        <!--</dependency>-->
 
         <dependency>
             <groupId>org.hswebframework.web</groupId>

+ 3 - 0
hsweb-message/hsweb-message-websocket/src/main/java/org/hswebframework/web/socket/handler/CommandWebSocketMessageDispatcher.java

@@ -139,6 +139,7 @@ public class CommandWebSocketMessageDispatcher extends TextWebSocketHandler {
 
     @Override
     public void afterConnectionEstablished(WebSocketSession session) throws Exception {
+        logger.debug("new WebSocket Session Established,sessionId:{}",session.getId());
         if (tokenParsers != null) {
             String token = tokenParsers.stream()
                     .map(parser -> parser.parseToken(session))
@@ -168,6 +169,8 @@ public class CommandWebSocketMessageDispatcher extends TextWebSocketHandler {
 
     @Override
     public void afterConnectionClosed(WebSocketSession session, CloseStatus status) throws Exception {
+        logger.debug("WebSocket Session Closed,sessionId:{}",session.getId());
+
         ThreadLocalUtils.clear();
         if (webSocketSessionListeners != null) {
             webSocketSessionListeners.forEach(webSocketSessionListener ->

+ 3 - 3
hsweb-message/hsweb-message-websocket/src/main/java/org/hswebframework/web/socket/message/DefaultWebSocketMessager.java

@@ -1,5 +1,6 @@
 package org.hswebframework.web.socket.message;
 
+import lombok.extern.slf4j.Slf4j;
 import org.hswebframework.web.concurrent.counter.Counter;
 import org.hswebframework.web.concurrent.counter.CounterManager;
 import org.hswebframework.web.concurrent.counter.SimpleCounterManager;
@@ -20,10 +21,9 @@ import static org.hswebframework.web.message.builder.StaticMessageBuilder.object
 import static org.hswebframework.web.message.builder.StaticMessageSubjectBuilder.*;
 
 /**
- * TODO 完成注释
- *
  * @author zhouhao
  */
+@Slf4j
 public class DefaultWebSocketMessager implements WebSocketMessager {
 
     private Messager messager;
@@ -95,7 +95,7 @@ public class DefaultWebSocketMessager implements WebSocketMessager {
                     }
                     socketSession.sendMessage(new TextMessage(((ObjectMessage) message).getObject().toString()));
                 } catch (IOException e) {
-                    e.printStackTrace();
+                    log.error("execute WebSocket command {} error",command,e);
                 }
             });
             return new MessageSubscribeSession(subscribe, socketSession) {

+ 3 - 3
hsweb-message/hsweb-message-websocket/src/main/java/org/hswebframework/web/socket/starter/CommandWebSocketAutoConfiguration.java

@@ -82,14 +82,14 @@ public class CommandWebSocketAutoConfiguration {
     @ConfigurationProperties(prefix = "hsweb.websocket")
     public ServletServerContainerFactoryBean createServletServerContainerFactoryBean() {
         ServletServerContainerFactoryBean container = new ServletServerContainerFactoryBean();
-        container.setMaxTextMessageBufferSize(10_1024_1024);
-        container.setMaxBinaryMessageBufferSize(10_1024_1024);
+        container.setMaxTextMessageBufferSize(10 * 1024 * 1024);
+        container.setMaxBinaryMessageBufferSize(10 * 1024 * 1024);
         return container;
     }
 
     @Configuration
     @ConfigurationProperties(prefix = "hsweb.websocket")
-    public static class HandlerConfigruation extends WebSocketConfigurationSupport {
+    public static class HandlerConfiguration extends WebSocketConfigurationSupport {
         private String[] allowedOrigins;
 
         public void setAllowedOrigins(String[] allowedOrigins) {

+ 0 - 4
hsweb-message/hsweb-message-websocket/src/test/java/org/hswebframework/web/socket/TestProcessor.java

@@ -60,10 +60,6 @@ public class TestProcessor implements CommandProcessor, WebSocketSessionListener
         }).start();
     }
 
-    @Override
-    public void destroy() {
-    }
-
     @Override
     public void onSessionConnect(WebSocketSession session) {
 

+ 0 - 4
hsweb-message/hsweb-message-websocket/src/test/java/org/hswebframework/web/socket/WebSocketServerTests.java

@@ -23,10 +23,6 @@ public class WebSocketServerTests {
        // System.setProperty("org.apache.activemq.SERIALIZABLE_PACKAGES", "*");
     }
 //
-    @Bean
-    public Messager messager() {
-        return new MemoryMessager();
-    }
 
 //    @Bean(destroyMethod = "shutdown")
 //    public RedissonClient redissonClient(){