Модераторы: skyboy, MoLeX, Aliance, ksnk
  

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> Чат с отображением вводимых символов собиседника, Чат в реальном времени  
:(
    Опции темы
Sun_ok
Дата 28.2.2008, 18:41 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 37
Регистрация: 4.9.2006

Репутация: нет
Всего: нет



Всем привет.
Нужен чать с одной особенностью, в разговоре принимают участие 2 человека и один из них видет всё, что происходит у 2ого в строке ввода.
нужны идеи как это сделать, через бд, или буфер файла , или ещё както ? , естественно чтобы не сильно грузило сервер, 
Идея при каждом нажатии клавишы отправлять запрос в базу, записывать, чиать мне покозалось слишком ресурсоёмкой. 
Как решить данную задачу ?
PM MAIL WWW   Вверх
WolfON
Дата 28.2.2008, 18:43 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 604
Регистрация: 19.7.2004

Репутация: 1
Всего: 8



передавать эти данные не через сервер, а непосредественно другому клиенту
допустим с помощью flash
PM MAIL ICQ   Вверх
gta4kv
Дата 28.2.2008, 18:47 (ссылка)   | (голосов:1) Загрузка ... Загрузка ... Быстрая цитата Цитата


Walking around mad.
***


Профиль
Группа: Завсегдатай
Сообщений: 1868
Регистрация: 25.7.2006

Репутация: нет
Всего: 91



Ну или AJAX, придеться правда при нажатие на каждую кнопку отсылать запрос серверу. изврат. а у второго пользователя каждую секунду обновлять данные. короче фтоку ajax, делайте на flash)
PM MAIL   Вверх
Sun_ok
Дата 28.2.2008, 21:19 (ссылка) |    (голосов:2) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 37
Регистрация: 4.9.2006

Репутация: нет
Всего: нет



вот вот,  я так же думаю, в топку аякс  smile 
вот только можно ли обеспечить связь flash - flash, 
если кто чисто случайно знает подскажите или кинте линк !
Пасибо !

PM MAIL WWW   Вверх
skyboy
Дата 28.2.2008, 21:45 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


неОпытный
****


Профиль
Группа: Модератор
Сообщений: 9820
Регистрация: 18.5.2006
Где: Днепропетровск

Репутация: 1
Всего: 260



во-первых, как вы себе это видите - прямое подключение-то?
если у обоих клиентов - прямой("белый") IP, то ещё куда ни шло - запомнили IP друг-друга и перебрасываем информацию. А если "серый" IP? Если маршрутизация? То что - просить пользователей настраивать NAT? 
Единственный стаблильный вариант - через сервер, как промежуточное звено с постоянным известным адресом. Не обязательно - AJAX, можно и flash с бинарным протоколом обмена вместо HTTP. в любом случае, будет ли соблюдено условие
Цитата(Sun_ok @  28.2.2008,  17:41 Найти цитируемый пост)
чтобы не сильно грузило сервер
 - напрямую зависит от количества пользователей, но потенциально, как мне кажется, лучше отказаться от подобной "фичи" в целях сохранности здоровья сервера.

PM MAIL   Вверх
Sun_ok
Дата 29.2.2008, 10:36 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 37
Регистрация: 4.9.2006

Репутация: нет
Всего: нет



Цитата(skyboy @ 28.2.2008,  21:45)
лучше отказаться от подобной "фичи" в целях сохранности здоровья сервера.

В том и дело, что это не "фича", а задача такая. 
Поэтому, я и спрашиваю, чтобы сервер не сошел сума,  я так понял лучший вариант это создать сокет сервер  на пхп и через него перекидоватся инфой с помощью флэша ?
А если логинется и сохранять параметры потом 2ой человек залогиневшись  берёт данные 1ого а 1й второго , флэш настраивается и соединяется возможно ли так ? просто, я не сильно разбераюсь в сетевых тонкостях, всёравно у человека должны быть точные координаты чтобы сервер мог ответить на запрос ! вот эти кординаты при входе уточнять и передавть друг другу для настройки соединения ?

PM MAIL WWW   Вверх
GeneralElectric
Дата 29.2.2008, 10:58 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 797
Регистрация: 11.1.2008

Репутация: нет
Всего: 16



координаты чего?
PM MAIL   Вверх
Glip
Дата 29.2.2008, 12:14 (ссылка) |    (голосов:1) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 473
Регистрация: 30.12.2006

Репутация: нет
Всего: 18



Цитата(Sun_ok @  29.2.2008,  10:36 Найти цитируемый пост)
просто, я не сильно разбераюсь в сетевых тонкостях, 

может быть имеет смысл сначала заполнить этот пробел?



--------------------
user posted image
PM MAIL   Вверх
Input
Дата 14.3.2008, 13:30 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 9
Регистрация: 13.3.2008

Репутация: нет
Всего: нет



поддерживаю Socket+Flash - лучшее решение для данной задачи

Это сообщение отредактировал(а) Input - 14.3.2008, 13:32
PM MAIL   Вверх
N0dwis
Дата 19.3.2008, 23:46 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Бывалый
*


Профиль
Группа: Участник
Сообщений: 238
Регистрация: 18.9.2007
Где: Луганск

Репутация: 1
Всего: 4



А в какой среде все это дело будет работать? Ну в смысле локалка или интернет? Если второе, то, думаю тормоза будут дикие в любом случае - скорость-то плавает всегда.
Можно еще вместо Flash Java апплеты попробовать, но проблема скорости все равно остается.
Но для чего это нужно?
PM MAIL   Вверх
sTa1kEr
Дата 5.4.2008, 00:03 (ссылка) |    (голосов:1) Загрузка ... Загрузка ... Быстрая цитата Цитата


9/10 программиста
***


Профиль
Группа: Завсегдатай
Сообщений: 1553
Регистрация: 21.2.2007

Репутация: 11
Всего: 146



Вероятно, Flash тут действительно лучше подходит, но и на Ajax можно не хуже сделать (может даже и лучше).

Цитата(gta4kv @  28.2.2008,  19:47 Найти цитируемый пост)
Ну или AJAX, придеться правда при нажатие на каждую кнопку отсылать запрос серверу.

Не обязательно отправлять каждый символ сразу. Можно записывать последовательность действий и интервалы между ними в буфер, а сбрасывать буфер серверу, к примеру, каждую секунду или еще реже.

Цитата(N0dwis @  20.3.2008,  00:46 Найти цитируемый пост)
Если второе, то, думаю тормоза будут дикие в любом случае - скорость-то плавает всегда.

С чего будут дикие тормоза? По сути это классический чат на Ajax, только будет передаваться не сообщение целиком, а последовательность действий пользователя и, соответственно, воспроизводится у удаленного пользователя в той же последовательности (а так же возможно с теми же интервалами). А если еще у сервера будет включен KeepAlive, то передача данных по 100 байт в секунду никак не приведет к бОльшим тормозам, чем классический чат на Ajax. 

С серверным скриптом вообще не вижу никаких проблем. requestor.php - получает действия клиента в виде JSON строки и добавляет ее в очередь для соответствующего клиента (в худшем случае записывает в файл/sqlite, в лучшем в shared memory). responser.php - отправляет клиенту всю очередь с действиями на выполнение и очищает ее. Все.

Написал не большой примерчик (без серверной части, с использованием jQuery)
index.html
Код

<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01//EN" "http://www.w3.org/TR/html4/strict.dtd">
<html>
    <head>
        <meta http-equiv="Content-Type" content="text/html; charset=UTF-8" />
        <script type="text/javascript" src="/lib/jquery/jquery-compressed.js"></script>
        <script type="text/javascript" src="/superchat.js"></script>
        <script type="text/javascript">
            $(init);
        </script>
        <title>Chat</title>
    </head>
    <body>
        <div id="client">
            <h3>From other client</h3>
            <div class="window" style="width: 400px; height: 100px; border: 1px solid;"></div>
            <h3>To other client</h3>
            <textarea class="type" rows="1" cols="40"></textarea>
        </div>
    </body>
</html>


superchat.js
Код

var buffer = [];
var events = [];

// Строка JSON якобы пришедшая с сервера
var server = '';

function init() {
    $('#client > textarea').keypress(function(e){
        // Все нажатия на клавиши пишем в буфер
        // В реальной же ситуации нужно обрабатывать только
        // необходимые коды символов, а так же другие события
        // (к примеру удаление или вствка мышкой)
        buffer.push(e.which);
    });
    
    // Отправка данных серверу через каждые 0.5 секунд
    setInterval(flushBuffer, 500);
    
    // Получение данных с сервера каждые 0.5 секунд
    setInterval(requestEvents, 500);
}

function flushBuffer(){
    if (buffer.length > 0) {
        var data = buffer;
        buffer = [];
        
        // Отправляем все накопленные действия пользователя на сервер
        // Для тестирования просто запишем в переменную
        server = data.toSource();
    }
}

function requestEvents() {
    // Тут в реали получаем ответ от сервера
    if (server.length > 0) {
        eval("events = " + server);
        server = '';
        
        while (events.length > 0) {
            var e = events.shift();
            
            // Если это символ, то добавляем его
            if (e >= 32 && e <= 127) {
                $('#client > div').append('<span>' + String.fromCharCode(e) + '</span>');        
            // Если backspace, то удаляем
            } else if (e == 8) {
                $('#client > div').children(":last").remove();
            }
        }
    }
}

PM MAIL   Вверх
nerezus
Дата 20.4.2008, 09:08 (ссылка)    | (голосов:1) Загрузка ... Загрузка ... Быстрая цитата Цитата


Вселенский отказник
****


Профиль
Группа: Участник
Сообщений: 3330
Регистрация: 15.6.2005

Репутация: нет
Всего: 43



накакого http для сервера чата.


--------------------
Сообщество художников Artsociety.ru
PM MAIL WWW   Вверх
  
Ответ в темуСоздание новой темы Создание опроса

Внимание: данный раздел предназначен для решения сложных, нестандартных задач.

 
0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | PHP: Для профи | Следующая тема »


 




[ Время генерации скрипта: 0.1400 ]   [ Использовано запросов: 22 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.