Страницы

Поиск по вопросам

вторник, 29 января 2019 г.

Возможно ли средствами javascript прочитать сокеты по ip/порту стороннего сервера?

Сейчас с помощью 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 лично я не видел подобных штук.

Комментариев нет:

Отправить комментарий