2015-04-23 3 views
1

Для socket.io, как вы можете слушать входящие данные, отличные от тех, которые выбраны как «события»? Я ищу для чтения и обнаружения строки ProxyProtocol.Socket.io. Как обнаружить входящие данные

+0

Что вы подразумеваете под строкой «ProxyProtocol»? Уже установленный сокет socket.io только отправляет один вид дейтаграммы. Установление соединения socket.io начинается с HTTP-запроса, потому что так работает webSocket – jfriend00

+0

Мой сервер socket.io находится за загрузчиком LoadBalancer, который отправляет строку ProxyProtocol, структура которой похожа на «PROXY TCP4 198.51.100.22 203.0.113.7 35646 80 \ r \ п». Это не обернуто ни одним HTTP, а просто строкой. Не уверен, что это возможно. – ngzhongcai

+1

Отправляет эту строку как? Это не может быть отправлено на webSocket, поскольку это было бы нарушением протокола. – jfriend00

ответ

1

Я сделал небольшое исследование. Похоже, что строка прокси отправляется с начального запроса HTTP на отдельной строке с помощью команды GET, как это:

PROXY TCP4 192.168.0.1 192.168.0.11 56324 80\r\n 
GET/HTTP/1.1\r\n 
Host: 192.168.0.11\r\n 
\r\n 

Вы можете увидеть это объясняется в this article.

Таким образом, это должно быть обработано сервером http, который помечает начальный HTTP-запрос, который запускает webSocket. Это происходит на начальной стадии подключения до того, как устанавливается webSocket. Таким образом, это не то, что вы слушаете впоследствии. Изучение кода socket.io потребует изучения, если он уже хранит эту информацию на socket.io socket или как вы можете подключиться к начальному обработчику HTTP, чтобы просмотреть эту информацию. Я сделаю немного больше исследований.

+0

Ничего себе, спасибо, приятель! Ваш ответ дал мне несколько идей. Я теперь выясняю, как получить его с NodeJS-уровня HTTP – ngzhongcai

+0

Привет jfriend00, я попытался получить его из уровня HTTP. Но это не работает. Вы можете увидеть вышеуказанный EDIT? – ngzhongcai

+0

@ngzhongcai - проверьте [этот ответ] (http://stackoverflow.com/questions/11182980/not-getting-remote-address-while-using-proxy-in-socket-io), который предлагает вам получить удаленный адрес из 'socket.handshake.headers ['x-forwarded-for'] || socket.handshake.address.address', где 'socket' является сокетом socket.io. – jfriend00

Смежные вопросы