我一直在寻找两天寻找可能对我有用的解决方案。遗憾的是,我只看到了如何设置websocket服务器(向客户端来回发送消息)和websocket客户端(驻留在浏览器中)的示例和指南。这些都不适合我,我不知道如何实现我想要的目标。
基本上我有以下websocket:
require('dotenv').config()
const WebSocket = require('ws');
var connection = new WebSocket('ws://XXX');
connection.onopen = function () {
connection.send(JSON.stringify({"authenticate":process.env.API}));
connection.send(JSON.stringify({"XXX":"YYY"}));
connection.send(JSON.stringify({
"db" : "unique_id",
"query" : {
"table" : "users"
}
}));
};
connection.onerror = function (error) {
console.log('WebSocket Error ' + error);
};
connection.onmessage = function (e) {
console.log('Server: ' + e.data);
var myResponse = JSON.parse(e.data);
var qList = myResponse.results;
};
我想要做的是运行我的nodeJS脚本,例如带有html页面的快速脚本,其中还包括来自onmessage的响应。为什么我复杂化而不仅仅使用websocket客户端是因为我无法公开发送我的身份验证码。
希望我已经足够清楚,如果你不确定我的问题,请告诉我!
PS。如果你认为我会更好地使用另一个websocket脚本,比如Socket.io--我一直在看着它们,并且没有太多明智的事情。
答案 0 :(得分:0)
你有很多选择。可能最简单的方法是导出连接。在文件的底部,例如module.exports = connection
然后在快递申请中,导入连接,例如const connection = require('./path/connection');
然后创建一个以给定间隔调用自身的函数并发送相应的消息。
然后在Express应用程序中,您可以使用connection.on(' message',(data,flags)=> // do stuff);
您的另一个选择是创建商店对象。 E.g。
// ./store.js
class store {
constructor() {
this.wsMaterial = {};
}
add(wsInfo) {
this.wsMaterial[key] = wsInfo
}
get store() {
return this.wsMaterial
}
}
module.exports = new store()
然后导入商店并更新它,例如
// ./websocket file
const store = require('./store');
...
connection.onmessage = function (e) {
console.log('Server: ' + e.data);
var myResponse = JSON.parse(e.data);
var qList = myResponse.results;
store.add(qList)
};
然后从Express ...
// ./express.js
const store = require('./store');
store.get // all of your stuff;