Показать сообщение отдельно
Старый 15.11.2013, 04:33   #11
moka
.
 
Регистрация: 05.08.2006
Сообщений: 10,429
Написано 3,454 полезных сообщений
(для 6,863 пользователей)
Ответ: Node JS net модуль

Сообщение от 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 в котором есть приватные бесплатные репозитории.
Я бы хотел изучить то как работает модуль и что он пытается сделать, и разработать архитектуру которая будет удобна в использовании и достаточно гибка для возможных изменений, и обсудили бы это далее..
(Offline)
 
Ответить с цитированием