我有网页控件(仪表)我动态创建1到x(最大30),具体取决于页面加载时的作业设置。 SignalR Hub代码位于每20秒触发一次的计时器上。这样,我的动态量表每30秒就会获得数据。我使用客户端javascript函数guage.set_vale()设置控件的值。当集线器触发并设置值时,此功能每30秒循环一次。
For i As Integer = 0 To 7
Dim UserControl As WebUserControl1 = CType(Me.LoadControl("~/WebUserControl1.ascx"), WebUserControl1)
UserControl.ID = "RG" & (i) ''1_RadGauge
UserControl.ControlWidth = 9
UserControl.setTankNumber = i + 20
Me.Panel1.Controls.Add(UserControl)
Next
目前,所有控件都从同一个HUB获取数据。提供这些控件的数据是服务器端的SQL数据库。
SELECT top(1) * from zSignalR_DB_Test order by id desc
所以所有控件都显示相同的数据。 我想要做的是让每个控件显示其数据。因此,每个控件都将从数据库中获取自己的数据
SELECT top(1) * from zSignalR_DB_Test WHERE ID = 'MyControlID' order by id desc
我看过SignalR Groups,但还没有看到如何做我想做的事情。通过这种方式,我需要做的就是将controlID与数据库中的数据相关联。
我的问题是:
对于我动态创建的每个控件,我是否需要一个单独的SignalR Hub?
我是否需要动态创建这些集线器?
SignalR小组是否正确地这样做?
如果我每30秒或每分钟更新一次,我不能只创建一个从客户端发回ID的方法,并且当我遍历客户端中的每个控件时(可能添加1秒暂停)发送ID a运行不同的SQL语句?
任何想法或例子都会很棒。
更多代码:
<script type="text/javascript">
$(function() {
var logger = $.connection.loghub;
logger.client.logMessage = function(msg) {
var ajaxPanel = document.getElementById("Panel1");
for (var x = 0; x < ajaxPanel.children.length; x=x+2) {
if (msg <=50){
var ImageElementGreen = ajaxPanel.children[x].children[0];
ImageElementGreen.style.visibility = 'visible'
var ImageElementRed = ajaxPanel.children[x].children[1];
ImageElementRed.style.visibility = 'hidden'
} else {
var ImageElementGreen = ajaxPanel.children[x].children[0];
ImageElementGreen.style.visibility = 'hidden'
var ImageElementRed = ajaxPanel.children[x].children[1];
ImageElementRed.style.visibility = 'visible'
}
var TBValueElement = ajaxPanel.children[x].children[3].children[0];
var TBValue = $find(TBValueElement.id);
TBValue.set_value(msg + "%");
var linearGaugeElement = ajaxPanel.children[x].children[4];
var linearGauge = $find(linearGaugeElement.id);
linearGauge.set_value(msg);
}
};
$.connection.hub.start();
});
</script>
答案 0 :(得分:0)
在SignalIR示例中,它被声明.. &#34;启动服务器并连接客户端后,从一个客户端发送的消息将出现在所有连接的客户端中。您只需将各个客户数据指向正确的UI控件或“衡量”即可。创建一个类来存储,格式化和访问您的数据。
话虽这么说,SignalIR是基于WebSocket(s),这是一个可爱的异步&#39;实时&#39;服务。 Websockets不受.Net实现的约束,甚至可以将arduino配置为客户端或服务器。
如果要去websocket路线,请创建一些javascript来触发......
dependencies {
compile("org.springframework.boot:spring-boot-starter-webflux:${springBootVersion}")
compile('org.springframework.boot:spring-boot-starter-actuator')
compile("org.springframework.data:spring-data-redis")
compile('org.springframework.cloud:spring-cloud-starter-netflix-eureka-client')
compile("org.jetbrains.kotlin:kotlin-stdlib-jdk8")
compile("org.jetbrains.kotlin:kotlin-reflect")
compile("com.fasterxml.jackson.module:jackson-module-kotlin:2.9.5")
runtime('org.springframework.boot:spring-boot-devtools')
testCompile('org.springframework.boot:spring-boot-starter-test')
}