gpt4 book ai didi

javascript - 如何使用需要套接字连接的中间件?

转载 作者:行者123 更新时间:2023-11-30 16:41:18 25 4
gpt4 key购买 nike

我正在使用 express.io 并尝试制作一个需要通过两个套接字连接到远程服务器的中间件。但是,我遇到了问题。

var net = require('net');

module.exports = function (host, port) {
return function (req, res, next) {
req._messages = net.connect(port, host);
req._commands = net.connect(port, host);

req._messages.on('data', function (data) {
req.io.broadcast('data', data.toString('ascii'));
});

req._messages.write('CF I\r'); // initialization command
next();
}
}

然后在我的主应用中:

var port = process.env.CYLON_PORT;
var host = process.env.CYLON_HOST;
var app = require('express.io').http().io();
app.use(require('./cylon/controller')(host, port));
module.exports = app;

但是,我遇到了一个问题。在每次请求时,它都会尝试重新连接。这会导致 Error: connect ECONNREFUSED。理想情况下,我希望它在应用程序启动时连接一次并维护该套接字,但它需要拦截每个连接。

如何在中间件中使用套接字?

最佳答案

你可以这样试试:

var net = require('net');

module.exports = function (host, port) {
var messagesConnection = net.connect(port, host);
var commandsConnection = net.connect(port, host);

return function (req, res, next) {
req._messages = messagesConnection;
req._commands = commandsConnection;

req._messages.on('data', function (data) {
req.io.broadcast('data', data.toString('ascii'));
});

req._messages.write('CF I\r'); // initialization command
next();
}
}

调用 require('./cylon/controller')(host, port) 将启动连接,然后在每次调用中间件时重新使用它们。

编辑:我想知道您是否真的需要在req 对象上设置所有这些新字段。例如,您可以拥有一些导出 iomessagesConnectioncommandsConnection 的文件,并且您可以在需要时要求它们。

在这里,每次调用中间件时,您最终都会在 messagesConnection 上添加一个均匀的监听器,这一点都不好。

Edit2:你可以做什么,因为你似乎在使用 express-io:

var net = require('net');

module.exports = function (io, host, port) {
var messagesConnection = net.connect(port, host);
var commandsConnection = net.connect(port, host);

messagesConnection.on('data', function (data) {
io.broadcast('data', data.toString('ascii'));
});

messagesConnection.write('CF I\r'); // initialization command

return function (req, res, next) {
req._messages = messagesConnection;
req._commands = commandsConnection;
next();
}
}

在你的主文件中:

var port = process.env.CYLON_PORT;
var host = process.env.CYLON_HOST;
var app = require('express.io').http().io();
app.use(require('./cylon/controller')(app.io, host, port));
module.exports = app;

关于javascript - 如何使用需要套接字连接的中间件?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/31942491/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com