Что является хорошим вариантом для неблокирующей «базы данных» (с использованием сокет-сервера TCP) - PullRequest
4 голосов
/ 16 ноября 2009

Короче говоря, я создаю сервер сокетов, чтобы я мог добавить многопользовательскую поддержку в мою игру Flash (с помощью бинарного сокета Actionscript 3.0 на стороне клиента).

Я решил пойти с Python, так как я единственный разработчик игры / сервера, и это будет мой первый неблокирующий сокет-сервер. Я собирался использовать Twisted, но я похитил, что буду использовать Python asyncore (Асинхронный обработчик сокетов).

Если я не ошибаюсь, подключение к традиционной базе данных - это процесс блокировки. Поскольку я пытаюсь сделать этот сервер неблокирующим, мне интересно, какие решения могут быть доступны для сохранения постоянных данных, связанных с игрой?

Ответы [ 2 ]

6 голосов
/ 16 ноября 2009

Я предлагаю вам использовать любую БД, которая вам нравится ( sqlite поставляется с Python и, вероятно, будет вам полезен!): Просто выделите поток, который обращается к указанной БД, принимая запросы из очереди (и с использованием другой очереди, переданной как часть запроса, для возврата результатов, если это необходимо). Потоки не так уж плохи, если у вас есть небольшое число, и они никогда не разделяют доступ к какой-либо структуре или системе, которые не предназначены только для чтения, а общаются только по очередям (которые по своей сути поточно-ориентированы).

1 голос
/ 16 ноября 2009

Блокировка (в традиционных терминах базы данных это «блокировка») неизбежна, если вам нужна какая-либо согласованность в ваших данных.

Согласованность, согласно которой «два игрока с разными результатами не могут быть объявлены победителями».

Уменьшение блокировки до минимума - это как раз одна из тех вещей в дизайне базы данных, которые превращают ее в искусство, которое вы (возможно, увы) можете освоить только после того, как испортили столько раз.

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