UaSubscription subscription; ImmutableList<UaSubscription> subscriptionList = client.getSubscriptionManager().getSubscriptions(); if (CollectionUtils.isEmpty(subscriptionList)) { subscription = client.getSubscriptionManager().createSubscription(100.0).get(); } else { subscription = subscriptionList.get(0); } // 监控项请求列表 List<MonitoredItemCreateRequest> requests = new ArrayList<>(); if (!CollectionUtils.isEmpty(nodes)) { for (NodeEntity node : nodes) { // 创建监控的参数 MonitoringParameters parameters = new MonitoringParameters(subscription.nextClientHandle(), 1000.0, // sampling // interval null, // filter, null means use default Unsigned.uint(10), // queue size true // discard oldest ); // 创建订阅的变量, 创建监控项请 求 MonitoredItemCreateRequest request = new MonitoredItemCreateRequest( new ReadValueId(new NodeId(node.getIndex(), node.getIdentifier()), AttributeId.Value.uid(), null, null), MonitoringMode.Reporting, parameters); requests.add(request); } } // 创建监控项,并且注册变量值改变时候的回调函数 subscription.createMonitoredItems(TimestampsToReturn.Both, requests, (item, id) -> item.setValueConsumer((i, v) -> log.info("item={}, value={}", i.getReadValueId().getNodeId(), v.getValue()))).get();将以上代码整合到websocket返回给前端
时间: 2024-03-20 19:43:26 浏览: 14
在一个后端程序中,你可以使用WebSocket将代码结果传递给前端。具体实现可以参考以下示例:
1. 在后端程序中创建WebSocketHandler,处理来自前端的WebSocket连接请求:
```java
@Component
public class MyWebSocketHandler extends TextWebSocketHandler {
@Override
public void handleTextMessage(WebSocketSession session, TextMessage message) {
// 处理来自前端的消息
// 解析消息内容,根据需要执行相应的操作
String payload = message.getPayload();
// ...
}
}
```
2. 在handleTextMessage方法中执行你的代码,并将结果通过WebSocket返回给前端:
```java
@Component
public class MyWebSocketHandler extends TextWebSocketHandler {
@Autowired
private MyUaClient myUaClient;
@Override
public void handleTextMessage(WebSocketSession session, TextMessage message) {
// 处理来自前端的消息
// 解析消息内容,根据需要执行相应的操作
String payload = message.getPayload();
// ...
// 执行你的代码,并将结果通过WebSocket返回给前端
try {
UaSubscription subscription;
ImmutableList<UaSubscription> subscriptionList = myUaClient.getSubscriptionManager().getSubscriptions();
if (CollectionUtils.isEmpty(subscriptionList)) {
subscription = myUaClient.getSubscriptionManager().createSubscription(100.0).get();
} else {
subscription = subscriptionList.get(0);
}
// 监控项请求列表
List<MonitoredItemCreateRequest> requests = new ArrayList<>();
if (!CollectionUtils.isEmpty(nodes)) {
for (NodeEntity node : nodes) {
// 创建监控的参数
MonitoringParameters parameters = new MonitoringParameters(subscription.nextClientHandle(), 1000.0, // sampling
// interval
null, // filter, null means use default
Unsigned.uint(10), // queue size
true // discard oldest
);
// 创建订阅的变量, 创建监控项请 求
MonitoredItemCreateRequest request = new MonitoredItemCreateRequest(
new ReadValueId(new NodeId(node.getIndex(), node.getIdentifier()), AttributeId.Value.uid(), null, null),
MonitoringMode.Reporting, parameters);
requests.add(request);
}
}
// 创建监控项,并且注册变量值改变时候的回调函数
subscription.createMonitoredItems(TimestampsToReturn.Both, requests, (item, id) -> item.setValueConsumer((i, v) -> {
String result = "item=" + i.getReadValueId().getNodeId() + ", value=" + v.getValue();
// 将结果通过WebSocket返回给前端
try {
session.sendMessage(new TextMessage(result));
} catch (IOException e) {
e.printStackTrace();
}
})).get();
} catch (Exception e) {
e.printStackTrace();
}
}
}
```
以上代码将结果通过WebSocket返回给前端,可以根据需要修改为自己的实现。