下述代码以typescript为例,实现一个通用的websocket调用接口工具类。
// websocket客户端使用的包,可用npm install socket.io-client安装
import * as io from "socket.io-client";
/**
* websocket连接帮助类
*/
class WebsocketConnectHelp {
/** websocket的连接对象 */
socket: SocketIOClient.Socket;
constructor(url: string/**连接的url */) {
this.socket = io.connect(`http://${url}/systemChannel`, {
transports: ["websocket"],//允许的连接方式,这里为websocket
reconnection: true,//是否断开重连
});
// 当websocket连接成功时触发
this.socket.on("connect", () => {
console.log(`connected to ${url} `);
});
// 当websocket连接失败时触发
this.socket.on("connect_error", (data: any) => {
console.error(`${url} connect_error with data=${data}`);
});
// 当websocket时数据发送失败时触发
this.socket.on("error", (data: any) => {
console.error(`${url} error with data=${data}`);
});
}
/**
* 通用的发送websocket请求函数
* @param cmd 接口名称
* @param data 接口输入参数
*/
async sendWebsocketRequest(cmd: string, data: any) {
return new Promise((resolve, reject) => {
try {
//触发`post/api/system/${cmd}`这个事件
this.socket.emit(`post/api/system/${cmd}`, data, (result: any) => {
resolve(result);
});
} catch (e) {
reject(e);
}
});
}
}
在拥有上述代码后,可以根据websocket链接的实际情况,进行接口的调用,其中url是需要调用的节点的ip以及端口号,cmd表示需要调用的接口名称,data表示需要调用的接口传入的数据,可以根据websocketConnectHelp.sendWebsocketRequest(cmd, data)函数,调用不同的接口。
例如,以下是调用安全关闭时的示例,由本章的接口描述中的<安全关闭节点>得知,接口全称为safetyClose,需要传入的参数为verifyType,verifyKey,isShutdown,我们可以使用下述代码进行调用。
(async () => {
const url = "192.168.0.1:19003";
const websocketConnectHelp = new
WebsocketConnectHelp(url);//实例化一个websocket连接帮助类
const cmd = "safetyClose";//接口名称
//传入参数
const data = {
verifyType: "001",
verifyKey:
"6f43a87af3a52c35150cabb80ce868318e89668aaea755295b15282df7bd89f3",
isShutdown: true
}
const result = await websocketConnectHelp.sendWebsocketRequest(cmd,
data);//调用接口
console.log(result);//获取返回参数
})()