Сейчас с помощью php получаю данные из разных сокетов по ip:port (с помощью фунуции fsockopen). Это делается для получения играющей в данный момент композиции на разных радиостанциях:
$open = fsockopen($radioip,$radioport,$errno,$errstr,'.5');
if ($open) {
fputs($open,"GET /7.html HTTP/1.1
User-Agent:Mozilla
");
stream_set_timeout($open,'1');
$read = fread($open,255); }
В результате основной javascript на главной странице регулярно обращается к этому php на сервере.
Хочется, чтобы всё это работало без лишних запросов к серверу, а средствами самого браузера. Возможно ли сделать подобную функцию на javascript - чтобы передавать ей ip и port а в результате получать необходимые данные?
Ответ
К сожалению, любые запросы браузером вне вашего "Origin" возможны только, если на той отвечающей стороне в заголовках ответов есть Access-Control-Allow-Origin с вашим origin. Это дело все закрыто для безопастности, т.к. если бы можно было с любого сайта вызывать AJAXом другой - очень много всего плохого можно было бы делать так.
Подробнее про кросс-доменный AJAX например вот тут
Websockets при этом вам в данном случае совершенно не помогут, т.к. это отдельный протокол обмена данными между сервером и клиентом. И причем последнее время браузеры все чаще форсируют wss (шифрованные вебсокеты), для которых помимо поддержки Websockets еще и SSL на этом поддерживающем сервере нужен. Так что вам особо без промежуточного php скрипта не обойтись.
Если вы задаетесь этим вопросом по причине большой нагрузки на ваш сервер - стоит задуматься облегчением этого всего дела чем-то типа тех же websockets. Только не сторонними серверами, а вашим собственным. Который будет например сам с какой-то определенной частотой обновлять свой кэш по удаленным серверам и с определенной частотой(или по факту изменения) присылать информацию клиентам. В websockets соединение держится и в нем возможен двухсторонний диалог между клиентом и сервером. Тем самым клиентам не нужно будет постоянно обращаться к какой-либо страничке, а они просто получат websocket message по факту его отправки. Такое можно реализовать например на Node.js или ASP.net. На PHP лично я не видел подобных штук.
Комментариев нет:
Отправить комментарий