Мое требование немного другое, не знаю, даже если оно достижимо.Node.js - Постоянный адаптер подключения
Я использую Node.js для разработки серверного сервера приложений. Этот сервер в основном выполняет два задания:
(1) Обслуживание клиентов: Мои клиенты - все мобильные телефоны, которые будут отправлять запрос HTTP (S), и после получения ответа закроют сеанс.
(2) Вызов другого асинхронно работающего сервиса: Сервер, с другой стороны, будет подключен к другому серверу, который работает только через соединение TCP/IP, а не с HTTP. Асинхронный означает, что сервер отправит запрос и не должен ждать ответа. Ответ будет получен через одно и то же соединение TCP/IP.
Так поток я хочу достичь, это:
- Мобильный телефон отправляет запрос HTTP на сервер
- сервер после получения запроса HTTP, делает вызов службы, который находится на TCP/IP
- Сервер получает ответ от службы TCP/IP по TCP/IP-соединению
- Сервер отвечает на ответ с ответом.
Чтобы представить приведенный выше поток, я добавил следующее изображение.
На изображении выше TCP/IP сервер управляется каким-либо другим провайдером.
Я написал следующий код в node.js, который работает в соответствии с нашим требованием несколько раз, но иногда он отправляет неверный ответ HTTP-запросу. Я не писал код для решения этой проблемы.
var net = require('net');
var client = new net.Socket();
client.connect(2202, 'example_ip', function() {
console.log('Connected');
// client.write('Hello, server! Love, Client.');
});
//Lets require/import the HTTP module
var http = require('http');
//Lets define a port we want to listen to
const PORT = 8080;
//We need a function which handles requests and send response
function handleRequest(request, response) {
var body = '';
request.on('data', function (chunk) {
body += chunk;
});
request.on('end', function() {
console.log('Received request from JMeter------------>>>');
// console.log(body);
client.write(body);
var count = 0;
client.on('data', function (data) {
console.log('<<<------------Received from SSM: ' + data);
response.end(data);
// client.destroy(); // kill client after server's response
});
});
client.on('close', function() {
console.log('Connection closed');
});
}
//Create a server
var server = http.createServer(handleRequest);
//Lets start our server
server.listen(PORT, function() {
//Callback triggered when server is successfully listening. Hurray!
console.log("Server listening on: http://localhost:%s", PORT);
});
Пожалуйста, один из них поможет мне решить эту проблему.
* WebSockets * или * События сервера посланный * бы варианты для этого – Molda
Я думаю, что вы не получили мой вопрос должным образом.Я могу использовать сетевые сокеты на другой стороне, но как я могу обеспечить правильный ответ на правильный запрос с мобильного телефона. Рассмотрите, что mob_1 отправляет запрос серверу, а сервер дает вызов службе tcp. К тому времени другой клиент, который является mob_2, отправляет запрос серверу и снова сервер вызывает службу tcp. К настоящему времени нет входящего сообщения из службы tcp, и оба клиента находятся на удержании. Через некоторое время я получаю входящее сообщение от службы tcp и как сопоставить ответ правильному клиенту? Как продолжить поток, чтобы отправить ответ? – Viddesh
ОК, я вижу. Таким образом, вам нужно только идентифицировать ответ запроса от службы TCP. Поскольку вы не указали какой-либо код в отношении запроса на службу TCP, вам это не поможет. Если служба TCP управляется вами, вы можете запрограммировать ее, чтобы вы могли отправить некоторый идентификатор вместе с запросом, а служба TCP должна вернуть идентификатор, чтобы вы могли легко идентифицировать его. – Molda