Создание простого чата на ASP
 

Данная статья является пробным камнем в огород ASP-чатстроительства... в дальнейшем возможна организация полного цикла подробных статей о создании целостного чат-сервера на ASP...

Итак, требуется создать чат-сервер на ASP - ну так давайте сразу из огня да в полымя...

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

Теперь посмотрим, как сие нам можно без особых потугов создать на ASP... Можно много и по "разному" отзываться о программистах Microsoft да и о самой конторе в целом, но вот за объект Application в данном случае можно только сказать спасибо. И правда, для создания общедоступного массива данных в ASP лучше не придумаешь. Итак, создаем файл global.asa (если он еще не создан) и в Application_OnStart добавляем следующий код:

dim MyMessArray() Redim MyMessArray(20) Application("MessageArray")=MyMessArray 

Таким образом мы создали массив MessageArray размерностью 20. Именно в нем и будут храниться все фразы пользователей в чате (размерность, естественно, зависит от вас, но, во-первых, врядли хотя бы четверти пользователей вашего чат-сервера ну очень сильно нужно будет сразу наблюдать на экране 50 или 100 фраз сразу, а, во-вторых, ресурсы сервера тоже не безграничны).

В принципе, на этом можно и закончить :-). Ну, почти закончить. А в виду того, что только три китайских "почти" и только в китае берут за одно целое, мы продолжим.

Сама организация записичтения, естественно, просто как два байта. Берем фразу, полученную от пользователя и пишем ее в наш массив:

dim NewMess() Redim NewMess(20) usermess=Request("message") messArray=Application("MessageArray") for i=0 to 19 NewMess(i+1) = messArray(i) next NewMess(0)=usermess Application.Lock Application("MessageArray")=NewMess Application.UnLock 
Если разобрать вышеуказанный код построчно, то:
  • объявили массив NewMess
  • в переменную usermess занесли данные, полученные от пользователя
  • переписали содержимое массива MessageArray, созданного на базе объекта Application, в свежеобъявленный массив NewMess
  • далее произвели "сдвиг вниз" на одну позицию
  • в нулевую позицию записали полученные данные от пользователя
  • залочили Application
  • переписали массив NewMess в MessageArray
  • разлочили Application
Со чтением и выводом на экран пользователей проще:
messArray=Application("MessageArray") for i=0 to 20 Response.Write messArray(i) Response.Write ("<br>") Response.Write Chr(13) next 
...и построчно:
  • переписываем содержимое общедоступного массива MessageArray в messArray
  • и в цикле выводим по очереди все фразы из массива, незабывая "втыкать" возврат каретки для браузера в виде
    и для облегчения просмотра в виде Chr(13) :-))
Ну вот теперь точно все, разве что за исключением определенных тонкостей, на разработку и реализацию которых может уйти вся жизнь :-)). Самое главное здесь, не забыть, что у вас должно присутствовать, как минимум, или два окна (но сие, по моему - бред) или два фрейма - один с формой ввода и, соответственно, с кодом для записи фраз в общедоступный массив и, второй "самообновляющийся" фрейм (окно), т.е. в данном фреме (окне ) должно быть указано в эелементе META конкретное значене Refresh, с кодом вывода массива...
 
Автор: Олег Яцура
 
Оригинал статьи: http://www.woweb.ru/publ/60-1-0-201