Форум Flasher.ru

Форум Flasher.ru (http://www.flasher.ru/forum/index.php)
-   Серверные технологии и Flash (http://www.flasher.ru/forum/forumdisplay.php?f=62)
-   -   XMLSocket отправляет несколько сообщений в одном (http://www.flasher.ru/forum/showthread.php?t=209595)

TurboDizel 27.11.2014 01:53

XMLSocket отправляет несколько сообщений в одном
 
Привет всем! Дело такое, есть XMLSocket, он подключен к Node.js серверу, всё отлично всё прекрасно, но иногда бывает, что flash своим XMLSocket`ом отправляет в одном сообщении два, а то и три сообщения. Из-за чего это понятно, интересно то, как их можно обозначить так, чтобы обработать потом на сервере? Хочу разбить эти сообщения каким-то (какими-то) символами, например поставить между сообщениями знаки #*, и по ним разбивать уже на сервере. Но вдруг у меня будет сообщение, внутри которого уже будут такие знаки #*, тогда проблема будет. Что посоветуете, какими символами можно разбить, или какие есть другие способы обозначить? Каждое сообщение - это json в виде строки.

bifidokk 27.11.2014 09:11

Более того, у вас могут прийти 2 "склееных" полных сообщений и кусочек третьего. Мы в конце каждого сообщения добавляем символ '\r' и разбиваем на сервере по нему, ну и проверяем каждое сообщение на корректность, если пришел кусок, то добавляем его в буфер и получаем продолжение уже в следующем сообщении.

Korchy 27.11.2014 09:58

Раз json, значит строка должна оформляться фигурными скобками. Считай количество и разбивай по ним.

KingMaks 27.11.2014 23:10

Korchy, а это не в напряг для сервера? пересчитывать скобки каждого сообщения пришедшего, а таких сообщений может быть по 100-200 в секунду?

Добавлено через 10 минут
bifidokk, так это флеш отправляет сообщения кучей или сервер, если пришло несколько сообщений подряд лепит их в одно?

bifidokk 28.11.2014 09:31

Цитата:

Сообщение от Korchy (Сообщение 1175492)
Раз json, значит строка должна оформляться фигурными скобками. Считай количество и разбивай по ним.

зачем, если можно добавить разделитель?

Добавлено через 1 минуту
KingMaks, сервер, я, честно говоря, не разбирался в механике и причине, почему и как это происходит (а зря), поэтому воду лить по этому поводу не буду

Korchy 28.11.2014 11:57

Цитата:

Сообщение от KingMaks (Сообщение 1175522)
Korchy, а это не в напряг для сервера?

Не знаю, надо тестировать.

Предложенный вариант с разделителем тоже хороший.

faraday 26.12.2014 21:22

Для node.js есть модуль carrier, который сам выделяет сообщения из чанков по разделителю. исопльзовать так
carrier.carry(socket, function(line) {
message(socket,line);
},'utf8', '\0');

Добавлено через 36 секунд
\0 стандартный разделитель для flash xmlSocket

PainKiller 29.12.2014 14:03

faraday спасибо, про carrier не знал, я лично когда столкнулся с такой проблемой (а я тоже передавал джисон в виде строки), вышел из положения так (это не весь код, но идея думаю будет понятна):
Код:

var json = "";

...

socket.on('data', function(data) {
                        try {
                                json = JSON.parse(data);
                            } catch (e) {
                                json += data;

                                try {
                                    json = JSON.parse(json);
                                    // Now it's fine.
                                } catch (e) {
                                    // Wait for more.
                                    return;
                                }
                            }
            // тут что то делаем с получившимся валидным json-объектом
    }



Часовой пояс GMT +4, время: 10:40.

Copyright © 1999-2008 Flasher.ru. All rights reserved.
Работает на vBulletin®. Copyright ©2000 - 2026, Jelsoft Enterprises Ltd. Перевод: zCarot
Администрация сайта не несёт ответственности за любую предоставленную посетителями информацию. Подробнее см. Правила.