四、Node-OPCUA 进阶(2)-OPCUA服务器(一)

1.0 写一个简单的node-opcua服务器

在这个示例中,我们在默认端口上创建了一个空的OPCUA Server。 端点URL是opc.tcp://HOSTNAME:26543,其中HOSTNAME是计算机的名称。

程序结构:

javascript 复制代码
const { OPCUAServer } = require("node-opcua");
(async () => {
try {
_"服务器代码"
}
catch(err) {
}
})();

服务器代码:

javascript 复制代码
const server = new OPCUAServer({ port: 26543 });
await server.start();
const endpointUrl = server.endpoints[0].endpointDescriptions()[0].endpointUrl;
console.log(
"  服务器启动成功,可以通过 url访问端点:  ",
endpointUrl
);
console.log("按 CTRL+C 停止服务");

完整的程序代码 my_ first**_server.js:**

javascript 复制代码
const { OPCUAServer } = require("node-opcua");
(async () => {
    try {
        const server = new OPCUAServer({ port: 26543 });
        await server.start();
        const endpointUrl = server.endpoints[0].endpointDescriptions()[0].endpointUrl;
        console.log(
            " 服务器启动成功,可以通过 url访问端点: ",
            endpointUrl
        );
        console.log("按 CTRL+C 停止服务");
    }
    catch (err) {
    }
})();
2.0 用Typescript创建一个opcua服务器

让我们添加chalk模块,它将允许我们在控制台上生成彩色信息。

javascript 复制代码
npm install chalk

下面是代码,程序的框架如下:

javascript 复制代码
// my_first_server_step-1_typescript.ts
import { OPCUAServer, ServerState, coerceLocalizedText } from "node-opcua";
import * as chalk from "chalk";
(async () => {
try {
_"服务器代码"
_"关闭管理"
}
catch(err) {
console.log("error", err);
process.exit(-1);
}
})();

服务器代码

javascript 复制代码
const server = new OPCUAServer({ port: 26543 });
await server.start();
const endpointUrl = server.endpoints[0].endpointDescriptions()[0].endpointUrl;
console.log(" 服务器已运行在 ", endpointUrl);
console.log("按 CTRL+C 停止服务");

关闭管理

让我们添加一些代码来优雅地关闭服务器。当用户按下CTRL+C启动服务器的关闭过程时,我们将进行拦截。

javascript 复制代码
process.on("SIGINT", () => {
_"防止重新输入"
console.log(" 收到来自用户的服务器中断 ");
console.log(" 关闭 ...");
server.engine.serverStatus.shutdownReason = coerceLocalizedText("被管理员关闭");
server.shutdown(10000, () => {
console.log(" 关闭结束 ");
console.log(" 完成 ");
process.exit(0);
});
});

防止重新输入

用户可能重复按CTRL+C,我们不希望多次调用shutdown。我们可以通过检查服务器状态来防止这种情况。

javascript 复制代码
if (server.engine.serverStatus.state === ServerState.Shutdown) {
console.log(
"服务器关闭已经请求...关闭将发生在 ",
server.engine.serverStatus.secondsTillShutdown,
"秒"
);
return;
}

运行服务器

my_first_server_step-1_typescript.ts

javascript 复制代码
npx ts-node-script my_first_server_step-1_typescript.ts
2.1 指定buildInfo

在这个示例中,我们在一个自定义端口上创建了一个空的OPCUA服务器,我们还在buildInfo中设置了一些额外的参数。

端点URL是opc.tcp://HOSTNAME:26543,其中HOSTNAME是计算机的名称。

my_first_server_step2.ts

javascript 复制代码
//my_first_server_step2.ts
import { OPCUAServer } from "node-opcua";
(async function main() {
try {
const server = new OPCUAServer({
port: 26543,
buildInfo: {
manufacturerName: "公司名",
productName: "我的第一个OPCUA服务器",
softwareVersion: "1.0.0"
},
});
await server.start();
const endpointUrl = server.endpoints[0].endpointDescriptions()[0].endpointUrl!;
console.log(" 服务器已运行在 ", endpointUrl);
console.log("按 CTRL+C 停止服务");
} catch (err) {
console.log("error", err);
process.exit(-1);
}
})();
相关推荐
天下代码客41 分钟前
使用electronc框架调用dll动态链接库流程和避坑
前端·javascript·vue.js·electron·node.js
weixin199701080161 小时前
【性能提升300%】仿1688首页的Webpack优化全记录
前端·webpack·node.js
不倒翁玩偶3 小时前
npm : 无法将“npm”项识别为 cmdlet、函数、脚本文件或可运行程序的名称。请检查名称的拼写,如果包括路径,请确保路径正确,然后再试一次。
前端·npm·node.js
一心赚狗粮的宇叔4 小时前
03.Node.js依赖包补充说明及React&Node.Js项目
前端·react.js·node.js
-嘟囔着拯救世界-5 小时前
【2026 最新版】OpenAI 祭出王炸 GPT-5.3-Codex!Win11 + VSCode 部署保姆级教程
vscode·gpt·chatgpt·node.js·node·codex·gpt5
全栈前端老曹20 小时前
【MongoDB】Node.js 集成 —— Mongoose ORM、Schema 设计、Model 操作
前端·javascript·数据库·mongodb·node.js·nosql·全栈
行者无疆_ty1 天前
什么是Node.js,跟OpenCode/OpenClaw有什么关系?
人工智能·node.js·openclaw
-凌凌漆-1 天前
【npm】npm的-D选项介绍
前端·npm·node.js
lucky67071 天前
Windows 上彻底卸载 Node.js
windows·node.js
Android系统攻城狮1 天前
鸿蒙系统Openharmony5.1.0系统之解决编译时:Node.js版本不匹配问题(二)
node.js·鸿蒙系统·openharmony·编译问题·5.1