Форум Академгородка, Новосибирск > Подключение 2-х клиентов к серверу
Помощь - Поиск - Пользователи - Календарь
Полная версия этой страницы: Подключение 2-х клиентов к серверу
Форум Академгородка, Новосибирск > Компьютеры и сети > Программирование > WEB-программирование
rozgalte
Всем здравствуйте!
Я сейчас пишу приложение, и у меня возник такой вопрос:

Есть сервер, реализованный на php. Методы класса осуществляют доступ к базе и производят выборку.
Есть клиентская часть, реализованная на as3. Приложение представляет собой интерактивное взаимодействие графических объектов между клиентами и сервером. В тот момент, когда первый пользователь "подключается" к серверу и рисует геометрическую фигуру на поле, она должна отображаться на экране у второго, который так же подключен к серверу и загрузил эту же swf. После этого наоборот: когда второй рисует фигуру, первый должен ее увидеть.
Координаты фигур (ходы) записываются в базу.
Подскажите, как реализовать взаимодействие между клиентами и сервером!
Была идея использовать следующее: в переменную записывается номер последнего хода, после запускается функция-слушатель, которая запускает запрос на получение максимального номера хода и сравнение его со значением переменной. Если неравенство, значит второй пользователь совершил ход, тогда первый пользователь снова может получать фокус. Но так вешается:

Код AS3:

private function mouseDownListener (e:MouseEvent):void {
...
wait();
...
}

public function wait():void{
parameter = "SELECT max(move_id) FROM move WHERE game_id="+last_non_fin_game_no;
var variables:URLVariables = new URLVariables();
variables.qu = variableText;
var request:URLRequest = new URLRequest("php_file_path");
request.data = variables;
request.method = URLRequestMethod.POST;
loader = new URLLoader();
loader.addEventListener(Event.COMPLETE, startCheckListener);
loader.load(URLReq);
}

public function startCheckListener (e:Event):void {
var myTimer:uint;
while (last_move_no = loader.data)
{
myTimer = setTimeout(wait, 1000);
}
trace("Переход фокуса на другого игрока");
}

Может быть, как-то по-другому это делается? Гуру, подскажите, пожалуйста.
Bebop
вешается у вас из-за этого:
Цитата
while (last_move_no = loader.data)


Ход мыслей у вас правильный. Можно слушать переменную номера последнего хода. Так же можно слушать переменную "чей сейчас ход".
Но:
1. Я бы не советовал формировать строку SQL-запроса на клиенте
2. Если вы хотите какой-то реалтайм (к примеру рисование фигуры в реальном времени, а не раз в 5 секунд, то класическая схема "клиент спросил - сервер ответил" не подойдет. Попробуйте сокеты. Red5, к примеру. Хорош SmartFoxServer (но он платный если хотите больше 20 коннектов одновременно)
3. Для получения извещений от сервера хороша техника Comet (вместо того чтобы спрашивать у сервера что-то раз в N секунд)
4. Хорошо подойдет RTMFP (p2p, вообще без сервера), бета уже доступна где-то на сайте Adobe. (т.к. вы формируете SQL-запросы на клиенте, то значит секурность вам скорее всего не нужна, т.е. п2п подойдет)

Удачи.

P.S.
По коду:
Переменная parameter вообще на сервер не отправляется, как я понял. Зачем она?
atonator
Цитата(Bebop @ 24.08.2010, 10:03) *
1. Я бы не советовал формировать строку SQL-запроса на клиенте

однозначно, ибо если на сервере принимать SQL от клиента, скорее всего можно отправить любой SQL-запрос (сомневаюсь, что на сервере происходит какая-то валидация SQL) // КО
OCTAGRAM
На каком хостинге идёт разработка? Я имею, насколько далеко можно сделать шаг влево, шаг вправо?

Скажем, возможно ли использовать Quercus и BAM, чтобы меньше нагружать базу данных? Или, допустим, Stand-Alone Comet сервер(Meteor, StreamHub)?

С Flash–специфичными технологиями дела не имел.
rozgalte
Цитата(Bebop @ 24.08.2010, 5:03) *
P.S.
По коду:
Переменная parameter вообще на сервер не отправляется, как я понял. Зачем она?


Да, переменная parameter не нужна, я ввел ее, чтобы все исполнять через функции, а это чистый код, она передается в качестве параметра variabletext.
А вы не работали с этими сокет-серверами? Red5, к примеру при запуске выдает ошибку "Системе не удается найти указанный путь", а SmartFoxServer ставится поверх предустановленного денвера в localhost, и заменяет собой все папки. Как они между собой уживаются?
Для просмотра полной версии этой страницы, пожалуйста, пройдите по ссылке.
Русская версия IP.Board © 2001-2024 IPS, Inc.