我的项目需要一些帮助。我需要在nodejs中接收TCP消息并通过Jquery Ajax将它们发送到Web界面。
请求在Web界面中触发,并通过ajax发送到node.js服务器。这个请求发送请求到TCP服务器(c ++)并将答案传递给webui。
我为测试purporses制作了一个功能,其中包括所有必要的任务。 function tcp_allinone(req,res){
var vRequest = req.body.jsonmsg;
console.log("< Info > tcp_allinone " + vRequest);
if (tcpcl == undefined) {
tcpcl = new net.Socket();
}
tcpcl.connect(objTCPSocket.Port, objTCPSocket.Host, function () {
tcpcl.write(vRequest);
});
tcpcl.on('data', function (data) {
res.contentType('json');
res.send({ data: data.toString() });
tcpcl.end();
});
tcpcl.on('error', function (error) {
res.contentType('json');
res.send({ data: error.toString() });
tcpcl.destroy();
});
tcpcl.on('close', function () {
tcpcl.destroy();
tcpcl = undefined;
});
}
对于此项目,连接必须保持打开状态,并且不希望为每个请求重新打开连接。因此,我写入函数,一个用于启动套接字并打开连接,另一个用于写入和接收消息:
function tcp_starter(req,res){
if (tcpcl == undefined) {
tcpcl = new net.Socket();
}
tcpcl.connect(objTCPSocket.Port, objTCPSocket.Host, function () {
console.log("< Info > client_connect ");
res.contentType('json');
res.send({ data: "< Info > client_connect" });
});
tcpcl.on('error', function (error) {
res.contentType('json');
res.send({ data: error.toString() });
tcpcl.destroy();
});
tcpcl.on('close', function () {
tcpcl.destroy();
tcpcl = undefined;
});
}
function tcp_writelisten(req,res){
var vRequest = req.body.jsonmsg;
console.log("< Info > tcp_writelisten " + vRequest);
if (tcpcl !== undefined) {
tcpcl.write(vRequest, function () {
console.log("< Info > tcp_write: " + vRequest);
});
}
tcpcl.on('data', function (data) {
res.contentType('json');
res.send({ data: data.toString() });
console.log("< Info > tcp_listen: " + data.toString());
});
}
tcp_starter在开始时调用,tcp_writerlisten每两秒从服务器获取新字符串。但是使用此构造,我收到以下错误消息: ttp.js:707 抛出新错误(&#39;在发送后无法设置标头。&#39;); ^ 错误:发送后无法设置标头。 在ServerResponse.OutgoingMessage.setHeader(http.js:707:11)
我想问题是,每个函数调用tcp_writelisten我建立一个新的Eventlistener等等我得到i ++接收消息。
我如何在没有重新连接的情况下摧毁事件登记者(&#39;数据&#39;?我如何改善这种结构?
非常感谢您的帮助