Как повысить производительность TCP -сервера для больших загрузки файлов от удаленных клиентов?Javascript

Форум по Javascript
Ответить Пред. темаСлед. тема
Anonymous
 Как повысить производительность TCP -сервера для больших загрузки файлов от удаленных клиентов?

Сообщение Anonymous »

Я строю простой TCP -сервер в node.js, чтобы получить большие файлы PDF от клиентов. Все работает нормально, когда я отправляю данные с одной и той же машины (Localhost) - я получаю большие куски 65536 байтов, и файл сохраняется почти мгновенно. медленное), хотя мое интернет -соединение хорошее (около 64 Мбит /с). < /p>
для того, чтобы быть специфическим: < /p>
Локальное соединение: кусочки ~ 65536 байт, общее время передачи ≈ 1 секунду < /p>
Удаленное соединение: кусочки ~ 1436. Упрощенная версия моего кода сервера TCP: < /p>
const net = require("net");
const crypto = require("crypto");
const fs = require("fs");
require("dotenv").config();

const server = net.createServer((socket) => {
socket.setNoDelay(true);
const chunks = [];

socket.on("data", (data) => {
chunks.push(data);
console.log(data.length); // 65536 for localhost, 1436 for remote clients.
if (data.toString("utf8").endsWith("DONE")) {
const bytes = Buffer.concat(chunks).slice(0, -(Buffer.from("DONE", "utf8").length));
console.log(bytes.length); // 20 MB
fs.writeFile(crypto.randomUUID() + ".bin", bytes, (err) => socket.write(JSON.stringify({ success: !err })));
}
});
});

server.listen(process.env.PORT, process.env.DEDICATED_SERVER_IPV4, () => console.log("Running..."));
< /code>
Вот более простая версия моего клиентского кода TCP: < /p>
const net = require("net");
const fs = require("fs");
require("dotenv").config();

fs.readFile("file.bin", (err, bytes) => {
if (!err) {
console.log(bytes.length); // 20 MB
const client = net.createConnection({ port: process.env.PORT, host: process.env.DEDICATED_SERVER_IPV4 }, () => {
client.write(bytes);
client.write("DONE");
});

client.on("data", (data) => console.log(data.toString()));
} else console.error(err.stack);
});
< /code>
Что я пробовал: < /p>
Увеличение Highwatermark до 1 мб. < /p>
называется socket.setnodelay (true), чтобы отключить алгоритм Nagle. Разница - это локальный против удаленного клиента. < /p>
Мои вопросы:
Почему Data.Length снижается до ~ 1436 байтов и является ли передача файла очень медленной, когда клиент удален? TCP -сервер для более быстрых больших загрузки файлов за удаленными подключениями?>

Подробнее здесь: https://stackoverflow.com/questions/797 ... te-clients
Реклама
Ответить Пред. темаСлед. тема

Быстрый ответ

Изменение регистра текста: 
Смайлики
:) :( :oops: :roll: :wink: :muza: :clever: :sorry: :angel: :read: *x)
Ещё смайлики…
   
К этому ответу прикреплено по крайней мере одно вложение.

Если вы не хотите добавлять вложения, оставьте поля пустыми.

Максимально разрешённый размер вложения: 15 МБ.

  • Похожие темы
    Ответы
    Просмотры
    Последнее сообщение

Вернуться в «Javascript»