Эффективно отправить большой массив координат с помощью Socket.io - PullRequest
0 голосов
/ 18 сентября 2018

Я тестировал производительность своего сервера node.js и обнаружил, что этот небольшой код слишком долго работает:

socket.emit("a",{a1:something,a2:veryBigArray});

Проблема в том, что мой массив очень большой, и socket.io должен его кодировать вJSON.Мой массив выглядит примерно так:

veryBigArray=[{x:0,y:0},{x:0,y:1},{x:1,y:1},{x:1,y:2}.......];

Меня интересует в основном производительность сервера.Я хочу, чтобы сервер мог продолжить работу как можно скорее.

Перед отправкой массива клиенту я генерирую массив, поэтому у меня нет проблем с полным изменением структуры отправленных данных.Может быть, массив может быть как-то сжат.Я читал об ArrayBuffer;

Каков наилучший (самый быстрый для отправки) способ отправки большого массива координат клиенту (браузеру) с помощью Socket.io?

1 Ответ

0 голосов
/ 18 сентября 2018

Если вам необходимо закодировать массив в JSON, я не думаю, что ArrayBuffer поможет. Однако, если вы знаете точную структуру данных отправляемого массива и можете предсказать его на стороне сервера, вы можете создать собственную эффективную схему кодирования / декодирования.

В вашем примере ваши данные - это просто массив пар x и y значений, где каждое значение является целым числом. Чрезвычайно простой, но, возможно, плодотворный подход заключается в извлечении данных из предсказуемых (ненужных) ключей x и y и их кодировании в виде простой строки CSV (значение, разделенное запятыми).

Например:

[{x:0,y:0},{x:0,y:1},{x:1,y:1},{x:1,y:2}]

будет кодироваться как строка:

0,0,0,1,1,1,1,2

Однако наиболее эффективный подход, вероятно, заключался бы в том, чтобы отказаться от socket.io для вашего собственного пользовательского интерфейса веб-сокета, который может каким-то образом отправлять двоичные данные напрямую, а не кодировать их в виде JSON. JSON по своей природе будет радикально неэффективен для отправки большого набора данных по сравнению с отправкой закодированного двоичного файла.

Редактировать: похоже, что socket.io может отправлять двоичные данные, поэтому я хотел бы изучить это вместе с некой эффективной схемой кодирования / декодирования, адаптированной к вашему набору данных.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...