Я новичок в nodejs, и я пытаюсь решить проблему связи с внешней системой.Nodejs websocket связь с внешней системой
Существует шлюз для внешней системы, который может обрабатывать запросы websocket на порте 5000. В приведенном ниже примере, когда вы запрашиваете главную страницу, nodejs открывает соединение с веб-сервером, а затем в событии открывания websocket отправляет запрос и ожидает ответа, который используется для ответа HTTP.
Вы знаете, как открыть websocket для внешней системы только один раз и обрабатывать запросы на основе идентификатора запроса?
var ws = require('ws');
var express = require('express');
var async = require('async');
var uuid = require('node-uuid');
app = express();
app.get('/', function (req, res) {
var webSocket = new ws('ws://localhost:5000/');
async.series([
function (callback) {
webSocket.on('open', function() {
webSocket.send(JSON.stringify({query:'data query', requestid: uuid.v4()}));
callback(null, 'data query');
});
},
function (callback) {
webSocket.on('message', function (data, flags) {
callback(null, data);
})
}
], function (err, results) {
res.setHeader('content-type', 'text/javascript');
res.send(results[1]);
webSocket.terminate();
});
});
var server = app.listen(3000, function() {
var port = server.address().port
console.log('Listening at %s', port)
});
Вы бы не просто открыть веб-сокет при любом запуске сервера или запрос на первой странице, а затем сохранить этот сокет в переменной вне конкретного запроса. Затем вы можете использовать этот сокет для любых будущих запросов. Если вы собираетесь одновременно запускать несколько запросов по одному и тому же веб-узлу из нескольких запросов на страницу, тогда вам нужно будет различать, какой ответ веб-памяти принадлежит с каким запросом. – jfriend00
Или вы можете поддерживать N веб-гнезд в кеше и просто извлекать один из кеша при поступлении запроса, а затем возвращать его в кеш при выполнении запроса. – jfriend00