我一直在探索 opcua,我有一个简单的 opcua 客户端和服务器应用程序,为此我使用了一个 node-opcua 包,那时我的服务器和客户端工作正常。
我的任务是,我需要在浏览器中运行opcua客户端,因为opcua没有提供任何方法。为此,我从 github 获取了 opcua golang 示例代码,并将其转换为 webAssembly。并使用 javascript fetch API 读取 HTML 文件中转换后的 golang 代码/然后我运行了简单的 HTML 代码以在浏览器中运行 OPC UA 客户端,我在下面给出了该 html
<html>
<head>
<meta charset="utf-8"/>
<script src="wasm_exec.js"></script>
<script>
const go = new Go();
console.log(go);
WebAssembly.instantiateStreaming(fetch("<filename>.wasm"), go.importObject).then((result) => {
go.run(result.instance);
});
</script>
</head>
<body></body>
</html>
当我在浏览器中运行该 html 代码时,它会抛出错误
dial tcp 192.168.225.225:4840: Connection refused
重现那个问题
GOOS=js GOARCH=wasm go build -o <filname>.wasm <filename>.go
).我尝试了以下方法
localhost
作为域名,我得到了像could not resolve address localhost:4840
0.0.0.0
中绑定主机名,并在客户端使用localhost
那个时候我也得到了像opcua: could not resolve address localhost:4840
,dial tcp 192.168.1.220:4840: Connection refused
这样的错误。dial tcp opc.tcp://opcuademo.sterfive.com:26543: Connection refused
这样的错误。我需要在浏览器中运行 OPC UA 客户端,如果您知道解决上述错误的答案,或者是否有其他方法可以完成我的任务,请告诉我?
问题是您不能在浏览器中使用任何 BSD 套接字。连接将被转换为 websocket。但是没有 opcua 服务器支持 Websocket 作为协议。最好的方法是在您的网络服务器上添加一个 opc 客户端。此客户端通过 websockets 与客户端 js 代码通信,并将值作为 json 解码格式发送。