Виталий И.
55 сообщений
#15 лет назад
Здравствуйте.
Передо мной стоит такая задача - передавать координаты мыши одного пользователя - другому - это я делал следующим образом:
(для начала решил организовать хотябы между окнами)
Первое окно: javascript поулчает координаты и вызывает функцию для отправки, как только функция свою работу
завершила, она ещё раз сама себя вызывает.
Отправка идёт аяксом в скрипт на PHP.
PHP скрипт получает данные, записывает их в текстовый файл.
Второе окно - постоянно обращается к этому скрипту, ему он выдаёт содержимое текстового файла.

Запросы идут, данные передаются, но очень медленно, кроме того комп вешается (может это из-за того, что всё на локальом хосте?)

Вопрос такой - как увеличить быстродействие?

пока есть такие варианты:
1. делать запросы к разным пхп скриптам (один - который записывает данные, второй - который получает их)
2. делать запись не в файл, а в mysql
Евгений Кашкаров
450 сообщений
#15 лет назад
Попробуйте сделать задержку между запросами, хотя бы пару секунд. И в отправке и в получении.
Николай Г.
601 сообщение
#15 лет назад
Цитата ("Jekyll"):
Попробуйте сделать задержку между запросами, хотя бы пару секунд. И в отправке и в получении.

Нагрузку это конечно снизит) Но вот быстродействие, мягко говоря, скатится ниже плинтуса, а первая задача все-таки была именно повысить быстродействие.
wellwit, варианты усовершенствования вашего приложения(можно использовать как вместе, так и по отдельности)
1) Сокеты, пайпы. Это для передачи информации из одного процесса в другой.
2) А нахрена козе боян, в смысле зачем нужно делать два процесса? Пишите свой серверный демон, да и дело с концом. Он для данных целей примитивным будет до безобразия. В принципе его можно написать и на PHP, конечно, но смотри п.3
3) PHP далеко не самый быстрый язык для таких целей. (Передача, вообще говоря нихрена не текстовой, а бинарной информации, при чем маленькими пакетами, но часто).
4) Уйти от ява-скрипта, вообще написать приложение на ява-апплете. При чем если приложение подписано, то можно пускать информацию вообще в обход сервера (сервер только в самом начале адреса рассказал и все).
Себастьян Ф.
584 сообщения
#15 лет назад
Цитата ("wellwit"):

1. делать запросы к разным пхп скриптам (один - который записывает данные, второй - который получает их)
2. делать запись не в файл, а в mysql


1. Не поможет
2. MySQL это программная обертка того же файла, поэтому быстродействие упадет.

Если вариант dervinar (демон на с или perl + activex или java аплет), не подходит, попробуйте поиграться с "кешированием". Т.е. JS-ом собирать пакет, например в 100 кб и отправлять его на сервер, а на другой стороне показывать индикатор загрузки (вроде того что в видеоплеерах)... После этого подобрать оптимальный вариант, размер кеша - кол-во запросов...
Евгений О.
2989 сообщений
#15 лет назад
Вы для начала скорость канала зацените. Если физическая скорость низкая, никакие технологии не помогут.
Максим В.
731 сообщение
#15 лет назад
Оффтопик
Цитата ("SField"):
попробуйте поиграться с "кешированием". Т.е. JS-ом собирать пакет, например в 100 кб и отправлять его на сервер
не кэшированием, а буферизацией.
Себастьян Ф.
584 сообщения
#15 лет назад
Оффтопик

Цитата ("VeMax"):
не кэшированием, а буферизацией.

Точно! В 3и часа утра, никак это слово в голову не лезло..
Николай Г.
601 сообщение
#15 лет назад
Цитата ("elosoft"):
Вы для начала скорость канала зацените. Если физическая скорость низкая, никакие технологии не помогут.

В данном случае обьем информации нулевой. 2 числа передать, смешно. Если ya.ru грузится меньше двух минут - данный сайт будет просто летать. Если провод интернета физически оборван - ну тут да, согласен, технологии не помогут)
Другое дело, что если передавать числа в текстовом режиме, да еще и хранить их в файле, к которому обращаться через два разных процесса... Вот тут да, тормоза еще какие могут быть.
А вообще не понимаю, о чем речь то? Демон пишется за полтора часа с учетом всех защит от DDOS и так далее.
Если нужна будет помощь, пишите - помогу с удовольствием.
Цитата ("SField"):
попробуйте поиграться с "кешированием". Т.е. JS-ом собирать пакет, например в 100 кб и отправлять его на сервер

А зачем?? И так скорость интернета не мгновенная, и так задержки будут а мы еще добавляем тормозов... Не верный это путь.

Исправлено:
Не на того человека была цитата, прошу прощения.
Виталий И.
55 сообщений
#15 лет назад
Цитата ("dervinar"):
При чем если приложение подписано, то можно пускать информацию вообще в обход сервера (сервер только в самом начале адреса рассказал и все).

Вот про передачу в обход сервера, хотелось бы, поподробнее...

Может есть что почитать по этому поводу.

Похоже, действительно нужно так делать чтоб сервак не нагружать.
Сергей Шпак
596 сообщений
#15 лет назад
wellwit, найдете ченить по данной тематике - дайте знать.
Николай Г.
601 сообщение
#15 лет назад
Цитата ("wellwit"):
Цитата ("dervinar"):
При чем если приложение подписано, то можно пускать информацию вообще в обход сервера (сервер только в самом начале адреса рассказал и все).

Вот про передачу в обход сервера, хотелось бы, поподробнее...

Может есть что почитать по этому поводу.

Похоже, действительно нужно так делать чтоб сервак не нагружать.

Да там нагрузки смешные... Вам передавать то что нужно? 2 числа... 8 байт.
А если с яваапплетами - тут все просто, получили от сервер IPшники собеседников, пооткрывали на каком-то порту сервера, и пишите в эти сервера что хочется. Все это можно сделать только если апплет подписанный(и вообще говоря, я бы такое для просто игрушки делать не стал - слишком риски велики).
Тут М.
626 сообщений
#15 лет назад
dervinar
Для общего развития, а через NAT так можно?
Николай Г.
601 сообщение
#15 лет назад
Цитата ("Demiurh"):
dervinar
Для общего развития, а через NAT так можно?

Ну хотя бы один из пользователей должен иметь белый IP, тогда никаких проблем. Иначе - ждать поголовного введения IPv6)
В данном случае, имхо, это абсолютно ненужная мера. 2 инта перекинуть и сервер не напряжется...
Виталий И.
55 сообщений
#15 лет назад
Цитата ("dervinar"):
Да там нагрузки смешные... Вам передавать то что нужно? 2 числа... 8 байт.

Не совсем так(не просто так у меня функция в конце опять сама себя вызывает), передавать числа нужно постоянно, по несколько раз в секунду между двумя пользователями, а пользовательских пар одновременно может быть неограниченное количество, а передавать данные должны оба пользователя. (уже 16 байт)
Если обновлять данные по 5 раз в секунду, то передавать нужно байт 80 в секунду для одной пары, а если их 100, то 8000 б/с, так что через сервер такое проворачивать врядли рационально (да и серв жалко - сдохнет бедный ).

Так что, наверное, нужно делать java - апплетами
Роман Беляев
16382 сообщения
#15 лет назад
Цитата ("wellwit"):
Если обновлять данные по 5 раз в секунду


у меня например задержки почти куда угодно 100 и выше мс. 200 - легко. Смысл так часто отсылать?
Ко всему прочему если работать через червер, то задержки будут расти, а это часть нежелательно.
Роман В.
99 сообщений
#15 лет назад
Автор решил сделать браузерный RAdmin ?
Николай Г.
601 сообщение
#15 лет назад
Цитата ("wellwit"):
Цитата ("dervinar"):
Да там нагрузки смешные... Вам передавать то что нужно? 2 числа... 8 байт.

Не совсем так(не просто так у меня функция в конце опять сама себя вызывает), передавать числа нужно постоянно, по несколько раз в секунду между двумя пользователями, а пользовательских пар одновременно может быть неограниченное количество, а передавать данные должны оба пользователя. (уже 16 байт)
Если обновлять данные по 5 раз в секунду, то передавать нужно байт 80 в секунду для одной пары, а если их 100, то 8000 б/с, так что через сервер такое проворачивать врядли рационально (да и серв жалко - сдохнет бедный ).

Так что, наверное, нужно делать java - апплетами

Так ли нужно передавать данные 5 раз в секунду? И 8 кб в секунду, это извините, смешно... И 80 кб в секунду тоже смешно. А когда вашим приложением будет пользоваться больше 1000 человек одновременно (тоесть аудитория будет порядка 20-30 тысяч), вы уж полюбому сможете себе купить второй сервер.
p2p нужна только когда нужно передавать немеряно много траффика(скайп, торрент)... Немаловажно то, что отследить через какие именно компы идет траффик практически невозможно(это и для скайпа нужно - переговоры не подслушать, и для торрента - за попу за распостранение пираток схватить сложнее). Поймите, вашим пользователям придется либо перенастраивать машины, либо использовать в качестве шлюзов людей с "белыми" IP адресами. Не нужен вам этот геморр. Вот демона написать - это нужно и полезно, хоть на той же java, хоть на D.
Себастьян Ф.
584 сообщения
#15 лет назад
Цитата ("dervinar"):

Цитата ("SField"):
попробуйте поиграться с "кешированием". Т.е. JS-ом собирать пакет, например в 100 кб и отправлять его на сервер

А зачем?? И так скорость интернета не мгновенная, и так задержки будут а мы еще добавляем тормозов... Не верный это путь.


попробуйте к скрипту сделать 100000 запросов по 2 байта, или 1 запрос на 200 кбайт, и посмотрите, что быстрее отработает, это в случае если написание демона не подходит и работа ведется через обычный php скрипт А теперь представьте что еще кто-то будет скачивать то что Вы сохранили.. Разумность или рациональность здесь не на первом месте..
Виталий И.
55 сообщений
#15 лет назад
Что-то мне подсказывает, что пора учить Java...
Объём данных, конечно, небольшой, только вот боюсь, что серв не будет успевать так часто отвечать каждому (хотябы по 3 раза в секунду)
Николай Г.
601 сообщение
#15 лет назад
Цитата ("wellwit"):
Что-то мне подсказывает, что пора учить Java...
Объём данных, конечно, небольшой, только вот боюсь, что серв не будет успевать так часто отвечать каждому (хотябы по 3 раза в секунду)

Java учить обязательно, даже если вы и не собираетесь именно её использовать. Если вы хотите сказать, что вы программист, знающий ООП - вы должны быть хотябы поверхностно знакомы с этим языком.
Welwit, в настоящий момент у меня на достаточно дохлой VDS-ке крутится сервер на D. В том числе, он обменивается с ява-апплетной стороной (там пакеты по 2-3 кб получаются). Так вот 5000 запросов в секунду даже существенно не подвешивают VDS.