Ajax и клиент-серверная архитектура с JavaScript

Я должен программировать веб-сайты, но мне скорее не нравится статическая природа HTML. Я предпочитаю больше клиент-серверной архитектуры.

Теперь я фигурировал, что с XMLhttp, можно в основном динамично обновить страницу и отправить/запросить для получения информации/действия к/от серверу. Таким образом, это в основном покрыло бы клиентскую область.

Но завершать клиент-серверную архитектуру, необходимо для сервера отправить/запросить информацию также без того, чтобы быть запрошенным.

Есть ли какой-либо путь, например, для сервера чата, для передачи полученного сообщения обратно всем клиентам (клиенты используют веб-браузер) без этого, клиенты должны запросить в фиксированный интервал? Я хочу реализовать тот, видят, в то время как Вы вводите что-то.

8
задан EndangeredMassa 15 January 2010 в 20:57
поделиться

5 ответов

Возможно, TypeOne и TypeTwo наследуют интерфейс, а затем выполняют следующие действия.

 public class SoftDrink<T>
    where T: IMyType
    {}
-121--3595045-

Как уже отмечалось другими, в одном случае вы пытаетесь вернуть cString (которое является значением char * в данном контексте - указателем) из функции, которая объявляется для возврата char (которое является целым числом). В другом случае выполняется обратное: выполняется присвоение char возвращаемого значения указателю char * . Это то, что запускает предупреждения. Конечно, необходимо объявить возвращаемые значения как char * , а не как char .

Обратите внимание BTW, что эти назначения на самом деле являются нарушениями ограничений с языковой точки зрения (т.е. они являются «ошибками»), так как запрещено смешивать указатели и целые числа в C, как это (кроме интегрального постоянного нуля). Ваш компилятор просто слишком простителен в этом отношении и сообщает об этих нарушениях как о простых «предупреждениях».

Я также хотел бы отметить, что в нескольких ответах вы можете заметить относительно странное предложение вернуть недействительные из ваших функций, поскольку вы изменяете последовательность на месте. Хотя это, безусловно, будет работать (так как вы действительно изменяете последовательность на месте), нет ничего плохого в возвращении того же значения из функции. Фактически, это довольно стандартная практика в языке Си, где это применимо (взгляните на стандартные функции, такие как strcpy и другие), поскольку она позволяет «цепочку» вызовов функций, если вы решите использовать ее, и практически ничего не стоит, если вы не используете «цепочку».

Это означает, что назначения в вашей реализации compeyString выглядят мне совершенно лишними (даже если они ничего не сломают). Я бы либо избавился от них

int compareString(char cString1[], char cString2[]) { 
    // To lowercase 
    strToLower(cString1); 
    strToLower(cString2); 

    // Do regular strcmp 
    return strcmp(cString1, cString2); 
} 

, либо использовал «цепочку» и сделал

int compareString(char cString1[], char cString2[]) { 
    return strcmp(strToLower(cString1), strToLower(cString2)); 
} 

(это когда ваш char * возврат пригодится). Просто имейте в виду, что такие «цепные» вызовы функций иногда трудно отладить с помощью пошагового отладчика.

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

-121--1609782-

Существует несколько различных способов достижения этой цели. На некоторые из них уже отвечают здесь, но я хотел включить еще несколько, а также мои мысли о них.

1. Опрос

На сервер поступают частые запросы на поиск новой информации. Это худший способ сделать это, но, наверное, самый простой. Если на вашем сайте будет небольшое число пользователей,возможно, стоит сделать это таким образом.

Это может быть выполнено с помощью setInterval (myFunction, n) в javascript для отправки запросов XMLHtterRequests на сервер каждые n миллисекунд. Затем, на сервере, вы отвечаете на это своей новой информацией, когда у вас есть, или каким-то сообщением, которое не подразумевает никакой новой информации.

2. Длинный опрос

Когда страница загружена, она запрашивает у сервера новую информацию. Сервер сохраняет соединение открытым до тех пор, пока не появится что-то для обратной передачи. Этот метод уменьшает количество используемого сетевого трафика, но увеличивает ресурсы, используемые на сервере. Вы можете использовать это для небольшого числа пользователей, но это не очень хорошо масштабируется.

Самый простой способ сделать это - иметь страницу, которая обрабатывает запрос AJAX, просто дождаться появления новой информации, а затем ответить. Это может связать большое количество подключений на сервере. Так что используй с осторожностью.

3. COMET

COMET в основном является длительным опросом, но сервер правильно настроен для него. Он знает, что эти связи не являются «реальными» и использует меньше ресурсов для их обработки. Это отличное решение для этой проблемы, но оно требует, чтобы сервер был явно настроен для этой цели. Есть COMET серверы и COMET добавки для других популярных серверов, но это потребует некоторые установки, а иногда и деньги.

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

4. RIA

Другим решением будет включение Flash, Silverlight или Java Applet на страницу. Люди часто делают это, используя объект 1x1, чтобы они могли использовать Flash или Silverlight для общения с сервером. Если вы не против добавить зависимость, это достойное решение. Если вы уже знаете Silverlight или Flash, это может быть относительно просто реализовать.

Вы можете найти учебные пособия в Интернете для каждого из этих вариантов.

5. Web Sockets

Если вы находитесь на переднем крае, вы можете просмотреть Web Sockets . Он доступен только в последних версиях современных браузеров. Это была часть HTML5, но теперь это может быть его собственная спецификация. Это означает, что старые браузеры не смогут справиться с этим. Но если вы не против ограничиться последними браузерами, вы можете использовать эту удивительную функцию.

Я считаю, что Chromium является единственным браузером, который в настоящее время поддерживает его. Тем не менее, проводится работа по внедрению этого в Firefox и WebKit.

Я избавлю вас от споров и просто скажу, что это делает именно то, что вы хотите. Аннотация спецификации говорит все это.

Эта спецификация определяет API, который позволяет веб-страницам использовать протокол Web Sockets для двусторонней связи с удаленным хостом.

Специальное упоминание

Если вы заинтересованы в мире Node JS,Вы не можете пойти не так с Socket IO . В нем будет реализована лучшая из всех технологий, доступных браузеру.

Вывод

Оптимальным вариантом является Socket.IO на узле JS. Однако для решения ASP.Net используйте COMET или Web Sockets. В противном случае использование Flash/Silverlight не страшно. Наконец, опрос и долгий опрос должны быть последними средствами. Вы всегда можете поддержать один из них, а затем вернуться к другому, если нет поддержки в браузере клиента.

13
ответ дан 5 December 2019 в 10:41
поделиться
  Window->Preferences->Java->Appearance->Type Filters

Необходимо указать пакеты, которые вы не хотите видеть.

http://help.eclipse.org/galileo/topic/org.eclipse.jdt.doc.user/tips/images/type-filter.png

См. Подсказки и рекомендации Java

Чтобы исключить некоторые типы из отображения в помощи по содержимому, используйте функцию фильтра типов, настроенную на странице предпочтений Java > Внешний вид > Фильтры типов .
Типы, соответствующие одному из этих узоров фильтров, не будут отображаться в диалоговом окне «Открыть тип» и не будут доступны для поддержки содержимого, быстрого исправления и организации импорта.
Эти узоры фильтров не влияют на представления проводника пакетов и иерархии.


finnw (OP) добавляет в комментарии:

Как теперь добавить один класс в этот список? Меня не интересует java.awt.List, но иногда я хочу java.awt.Window или java.awt.Dimension. -

«Фильтр типов» фактически основан на сопоставлении образца класса , что означает, что если добавить

 java.awt.List

, этот класс исчезнет из предложений content assist.
Если вы знаете, что все классы java.awt.Lxxx не представляют никакого интереса, вы можете добавить

 java.awt.L*

Все другие классы из java.awt будут по-прежнему присутствовать для поддержки содержимого.
С недавним затмением (у меня сейчас затмение 3 .6Mx, но это должно работать и для 3,5 .x), вы не ограничиваетесь пакетом образцов только в фильтре типов.

-121--753514-

Да, можно использовать COMET .

-121--3603199-

Клиент должен сообщить серверу, когда клиент-пользователь начнет ввод. У тебя есть пара вариантов.

  1. Частые запросы от сервера для последней операции. Это будет происходить для каждого пользователя, участвующего в чате. Тот же запрос можно использовать и для отправки на сервер специфичной для пользователя активности: «Джонатан набирает»...

  2. Долгий опрос. Это по существу запрашивает информацию с сервера, и сервер сохраняет соединение открытым до тех пор, пока ему не будет что-то отправить обратно. Таким образом, ваши запросы сведены к минимуму, но ваши подключения остаются открытыми дольше.

В зависимости от вашего трафика, типа передаваемых данных, среды сервера и многих других факторов, один из этих вариантов может светить больше, чем другой.

1
ответ дан 5 December 2019 в 10:41
поделиться

Вы можете использовать Silverlight для push-уведомления. Посмотрите PollingDuplexHttpbinding . Поскольку вы используете ASP.NET MVC, Добавление Silverlight будет легким.

Посмотрите на этой странице для получения дополнительной информации.

0
ответ дан 5 December 2019 в 10:41
поделиться

Да, вы можете использовать COMET .

2
ответ дан 5 December 2019 в 10:41
поделиться

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

Вы лучше выключите / используя библиотеку, которая может периодически запросить обновления с сервера. Вы можете инкапсулировать эти типы запросов в объекте JavaScript, который может пожарные события. Таким образом, ваш скрипт на стороне клиента может действовать так, будто он получает уведомление с сервера. Просмотрите некоторые общие вещи с помощью Comet Вы, вероятно, можете найти некоторые инструменты, которые помогут вам побочный код клиента.

HTML 5 имеет определенные предварительные попытки по этому типу функциональности, но если вы хотите, чтобы ваше приложение работать на более старых браузерах, ваше лучшее использование более стабильных методов, таких как запрошенные обновления AJAX.

0
ответ дан 5 December 2019 в 10:41
поделиться
Другие вопросы по тегам:

Похожие вопросы: