Skip to content

Tokyo Tyrant — Exception: connection is not open

29/01/2010

При попытке написать блог на связке Node + nginx + Tokyo Tyrant наткнулся на интересную вещь. Нам нужно открыть соединение с Tyrant, чтобы сохранять и получать оттуда записи. Первый же вариант — открыть соединение вместе с инициализацией Nerve и использовать его по мере необходимости. В теории это должно работать (пока клиент один):

var hello = [
    ["/", function(req, res) {
        var page_text = '';

		/* Получение и вывод записей в блоге */
			
    }],
    ["/write", function(req, res) {

		/* Форма для добавления новой записи */
		
    }],

    [post('/save'), function(req, res) {

        // Save post to Tyrant
        getPostParams(req, function(data) {
                
			/* Сохранение полученной записи в Tyrant */

		});

    }],
];

tyrant.connect();

tyrant.addListener('connect', function() {
	server = nerve.create(hello);
	server.serve();
});

На деле же соединение с Tyrant закрывается само по себе в течении примерно пяти-семи минут. Скорее всего дело в режиме соединения. Я пока не очень разобрался в протоколе TT, но например в Sphinx, протокол которого я реализовывал в limestone, есть два режима подключения — обычный и persistent connection. Возможно в Tokyo Tyrant есть такая же опция.

Пока же самым простым способом пофиксить соединения было открывать их при каждом запросе:

var hello = [
    ["/", function(req, res) {
        var page_text = '';

        tyrant.connect();
        tyrant.addListener('connect', function() {
            
			/* Получение и вывод записей в блоге */
			tyrant.quit();

        });
    }],
    ["/write", function(req, res) {

		/* Форма для добавления новой записи */
		
    }],

    [post('/save'), function(req, res) {

        // Save post to Tyrant
        getPostParams(req, function(data) {
            tyrant.connect();
            tyrant.addListener('connect', function() {
                
				/* Сохранение полученной записи в Tyrant */
				tyrant.quit();
	
            });
        });

    }],
];

server = nerve.create(hello);
server.serve();

Понятно что для обмена данными с пользователем этот способ не годится. Но теоретически на него можно наткнуться если открыть соединение с TT и ждать конца длительной операции (например, перекодирование видео).

Кстати, статья по Redis похоже откладывается. После Tokyo Tyrant будет описан CouchDB.

Добавить комментарий

Заполните поля или щелкните по значку, чтобы оставить свой комментарий:

Логотип WordPress.com

Для комментария используется ваша учётная запись WordPress.com. Выход / Изменить )

Фотография Twitter

Для комментария используется ваша учётная запись Twitter. Выход / Изменить )

Фотография Facebook

Для комментария используется ваша учётная запись Facebook. Выход / Изменить )

Google+ photo

Для комментария используется ваша учётная запись Google+. Выход / Изменить )

Connecting to %s

%d такие блоггеры, как: