diff --git a/application/src/main/java/org/thingsboard/server/config/WebSocketConfiguration.java b/application/src/main/java/org/thingsboard/server/config/WebSocketConfiguration.java
index 35d1773..9f7c08f 100644
--- a/application/src/main/java/org/thingsboard/server/config/WebSocketConfiguration.java
+++ b/application/src/main/java/org/thingsboard/server/config/WebSocketConfiguration.java
@@ -47,8 +47,8 @@ public class WebSocketConfiguration implements WebSocketConfigurer {
@Bean
public ServletServerContainerFactoryBean createWebSocketContainer() {
ServletServerContainerFactoryBean container = new ServletServerContainerFactoryBean();
- container.setMaxTextMessageBufferSize(8192);
- container.setMaxBinaryMessageBufferSize(8192);
+ container.setMaxTextMessageBufferSize(32768);
+ container.setMaxBinaryMessageBufferSize(32768);
return container;
}
diff --git a/ui/src/app/api/telemetry-websocket.service.js b/ui/src/app/api/telemetry-websocket.service.js
index f84d66d..b0e8ea9 100644
--- a/ui/src/app/api/telemetry-websocket.service.js
+++ b/ui/src/app/api/telemetry-websocket.service.js
@@ -23,6 +23,8 @@ export default angular.module('thingsboard.api.telemetryWebsocket', [thingsboard
const RECONNECT_INTERVAL = 2000;
const WS_IDLE_TIMEOUT = 90000;
+const MAX_PUBLISH_COMMANDS = 10;
+
/*@ngInject*/
function TelemetryWebsocketService($rootScope, $websocket, $timeout, $window, types, userService) {
@@ -75,19 +77,40 @@ function TelemetryWebsocketService($rootScope, $websocket, $timeout, $window, ty
return service;
function publishCommands () {
- if (isOpened && (cmdsWrapper.tsSubCmds.length > 0 ||
- cmdsWrapper.historyCmds.length > 0 ||
- cmdsWrapper.attrSubCmds.length > 0)) {
- dataStream.send(angular.copy(cmdsWrapper)).then(function () {
+ while(isOpened && hasCommands()) {
+ dataStream.send(preparePublishCommands()).then(function () {
checkToClose();
});
- cmdsWrapper.tsSubCmds = [];
- cmdsWrapper.historyCmds = [];
- cmdsWrapper.attrSubCmds = [];
}
tryOpenSocket();
}
+ function hasCommands() {
+ return cmdsWrapper.tsSubCmds.length > 0 ||
+ cmdsWrapper.historyCmds.length > 0 ||
+ cmdsWrapper.attrSubCmds.length > 0;
+ }
+
+ function preparePublishCommands() {
+ var preparedWrapper = {};
+ var leftCount = MAX_PUBLISH_COMMANDS;
+ preparedWrapper.tsSubCmds = popCmds(cmdsWrapper.tsSubCmds, leftCount);
+ leftCount -= preparedWrapper.tsSubCmds.length;
+ preparedWrapper.historyCmds = popCmds(cmdsWrapper.historyCmds, leftCount);
+ leftCount -= preparedWrapper.historyCmds.length;
+ preparedWrapper.attrSubCmds = popCmds(cmdsWrapper.attrSubCmds, leftCount);
+ return preparedWrapper;
+ }
+
+ function popCmds(cmds, leftCount) {
+ var toPublish = Math.min(cmds.length, leftCount);
+ if (toPublish > 0) {
+ return cmds.splice(0, toPublish);
+ } else {
+ return [];
+ }
+ }
+
function onError (/*message*/) {
isOpening = false;
}