Сообщение от pax
Не понял на счет Event, не использовать приставку к объектам? У меня там есть отдельно TCPSetrver и TCPServerClient, т.к. евент сервер и клиент это обертки над ними.
|
Ну ты всё ещё в синхронном мире
Обычно если такие вещи делают то естественно только асинхронно, т.к. это же IO.
Сообщение от pax
Это частота отправки. 10 раз в секунду. Если приходит много пакетов, то при отправке они клеятся в один буфер.
|
Уф.
Ну тут важно одно - соблюдать очередь вызовов отправки, остальное не важно.
У тебя есть stream'ы, засунуть в них данные на отправку времени много не занимает (смотря как сериализаия сделана).
Поэтому не думаю что стоит тут пытаться переоптимизировать (клеить пакеты и т.п.).
Пользователь вызвал - вот и шли сразу, не стоит делать таймауты и задержки, т.к. это лишние телодвижения.
Тем более если мы хотим что-то подобное:
socket.emit('foo');
socket.disconnect();
Сообщение от pax
Кстати по этому поводу есть вопрос по архитектуре. Сейчас у меня общий цикл, который берет всех клиентов которым пришли пакеты и по очереди отправляет, т.е. я собираю в массив всех кому пришли пакеты. При отправке я создаю новый пустой массив, а текущий перебираю. Это норм, или каждому клиенту сделать свой цикл с setTimeout?
|
Не нужно никаких циклов и итераций. Кодер хочет слать сообщение - вот и шли сообщение. Шлёт слишком много? - проблема кодера. Если он сам не заботиться о нормальных пакетах и т.п. Тем более в играх редко используют event-основанную систему, а чаще всего шлют пакеты со state'ами а они большие.
Так что юзер сам об этом должен заботиться, и не пытайся решать за него какие-то задачи, тем более если это вносит задержку в 10мс.
Т.к. делая это в node.js - это не сэкономит на производительности, процессору всё равно это нужно сделать и если это делает node то это выполняется в том же потоке - следственно от перестановки мест - скорость не поменяется, а вот задержку этим ты создашь.
Если тебя заботит скорость сериализации - то тут нужно брать C++ и писать именно эту часть как Addon (module), в нете полно доков и будет очень подобно C# в плане работы с данными.
В разработке node модулей очень важно соблюдать их простоту и конкретность в том что они делают. А юзер уже сам там решит что и как с этим делать (нужно клеить пакеты или не нужно и т.п.).
Т.к. ты по сути сделал NoDelay (Nagle's Algorithm).
Сообщение от pax
Сейчас оно на моем сервере на svn, по поводу публичного доступа я пока еще не думал.
|
Можно заюзать bitbucket в котором есть приватные бесплатные репозитории.
Я бы хотел изучить то как работает модуль и что он пытается сделать, и разработать архитектуру которая будет удобна в использовании и достаточно гибка для возможных изменений, и обсудили бы это далее..