Перейти к содержимому

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.

About these ads
Один комментарий

Обратные ссылки и уведомления

  1. Tokyo Tyrant — Exception: connection is not open « nodeJS

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

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

Логотип WordPress.com

You are commenting using your WordPress.com account. Log Out / Изменить )

Фотография Twitter

You are commenting using your Twitter account. Log Out / Изменить )

Фотография Facebook

You are commenting using your Facebook account. Log Out / Изменить )

Connecting to %s

Follow

Get every new post delivered to your Inbox.

Join 28 other followers

%d bloggers like this: