2009-11-16 3 views
3

Мы начинаем запуск уникального чата на следующей неделе. Наш чат в настоящее время основан на Jabber (используя Openfire как наш сервер Jabber) через BOSH (с использованием Punjab), с jQuery для наших клиентских скриптов.Постоянно подключайтесь к серверу во время навигации по сайту

В настоящее время наша самая важная проблема с текущей настройкой связана с навигацией по сайту, при навигации между страницами на наших веб-сайтах соединение BOSH теряется до тех пор, пока новая страница не будет загружена и соединение BOSH не будет аутентифицировано. Из-за этой проблемы мы должны установить очень большой тайм-аут (около 1 минуты), прежде чем выходить из системы, покинувших наш сайт без выписки.

Мы знаем о навигационных решениях на основе привязки на основе javascript, но для реализации этого потребуется много изменений в разметке нашего сайта, CSS и JS-скриптах, а структура нашего сайта очень сложна.

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

есть ли решение для нашей проблемы, которое не требует полной перезаписи структуры сайта/разметки?

Заранее благодарен!

+0

Вы рассматривали технику, которую использует Facebook для своего чата? Или это то, что вы ссылаетесь на «основанные на якоре основанные навигационные решения ..»? –

+0

Да, Facebook использует навигационную привязку ...Это то, о чем я говорил в – jitzo

+1

, который по-прежнему является ошибкой ... – Shawn

ответ

1

Хотя это может быть не полная переписывание, я скажу, что это займет некоторое время. У вас есть чат-бокс и ajax в содержании, то есть, если, как и на facebook, внизу есть панель чата, секция остальная в id, на который вы ввели ваши страницы. Другими словами, выведите чат из своего макета, поместите его отдельно и сделайте свои ссылки в ajax-запросы, которые можно обрабатывать с помощью глобального обработчика ссылок, а ссылки заменены посредством поиска заменой по всем файлам через sed. (href = "изменено на href =" javascript: urlhandler (но для этого нужно будет учитывать внешние ссылки) Другой вариант, о котором я могу думать, состоит в том, что на вашем сайте есть два фрейма. Главная и чат. перейдите со страницы, D/C или что бы с ними не произошло.

+0

Спасибо за ваш комментарий, относительно первого решения - его в значительной степени то, что я называл «навигацией на основе привязки» - минус якоря, которые будут указывать, что текущую страницу (похожую на навигацию в Facebook/Gmail) - , если я обработаю все ссылки через JS-код и останусь на одной странице «навсегда» - у меня все еще будет проблема, о которой я упомянул раньше - URL-адрес всегда будет оставаться неизменным, и это приведет к проблемам при обновлении страницы/навигации по обратной стороне/закладке страницы) ... также это решение потребует серьезных изменений ... – jitzo

+0

Что касается вашего второго решения - которое был упомянут в вопросе - он потребует гораздо меньших изменений, но он имеет ту же проблему URL-адреса ... – jitzo

+0

Чувак хороший сэр, я поближе посмотрю, спасибо за информацию :) –

1

Вы используете реализацию своего чата на каждой странице? Если это так, ответ заключается в настройке кэширования для ваших скриптов. Убедитесь, что все большие файлы JS являются внешними и что сервер не регистрирует никаких изменений (например: Last Modified). Объедините изображения с спрайтами. Запустите свой код через один из многих существующих мини-издателей. И последнее, но не менее важное: инвестируйте в CDN. Amazon CloudFront прост и дешев: вы обнаружите, что он работает чудесами для повышения производительности.

0

Вы можете использовать плагин истории jquery (http://www.mikage.to/jquery/jquery_history.html) для обработки назад и вперед навигации и загрузки страниц через ajax, как вы говорили.

Что-то, как это должно работать (непроверенные):

page1.htm:

<html> 
<head><title>Page 1</title></head> 
<body> 
    <div id="content"> 
     <a href="/page2.htm">Load Page 2</a> 
    </div> 
    <div id="chat"></div> 
</body> 
<script> 
    $(function(){ 
     function loadPage(hash){ 
      if($.browser.msie) { 
     hash = encodeURIComponent(hash); 
     } 
      $.ajax({ 
       "url":hash, 
       "success":function(response){ 
        var newPage = $(response); 
        document.title=newPage.find("title").html(); 
        $("#content").html(newPage.find("#content").html()); 
       } 
      }); 
      return false; 
     } 
     $.historyInit(loadPage); 
     $("a").live("click",function(){ 
      $.historyload(this.href); 
     }); 
    }); 
</script> 
</html> 

page2.htm:

<html> 
<head><title>Page 2</title></head> 
<body> 
    <div id="content"> 
     <a href="/page1.htm">Load Page 1</a> 
    </div> 
    <div id="chat"></div> 
</body> 
<script> 
    $(function(){ 
     function loadPage(hash){ 
      if($.browser.msie) { 
     hash = encodeURIComponent(hash); 
     } 
      $.ajax({ 
       "url":hash, 
       "success":function(response){ 
        // this is just an example and not too efficient. 
        var newPage = $(response); 
        document.title=newPage.find("title").html(); 
        $("#content").html(newPage.find("#content").html()); 
       } 
      }); 
      return false; 
     } 
     $.historyInit(loadPage); 
     $("a").live("click",function(){ 
      $.historyload(this.href); 
     }); 
    }); 
</script> 
</html> 

Если вы хотели бы аутсорсинг работы мне I будем рады помочь. : o)

 Смежные вопросы

  • Нет связанных вопросов^_^