oncesk / yii-node-socket

66 stars 46 forks source link

ReferenceError: io is not defined client.js:647 #32

Closed tselishev-semen closed 10 years ago

tselishev-semen commented 10 years ago

Добрый вечер. Наткнулся на проблему. использовал метериалы демки в папке examples/events. Выдает ошибку при открытии http://127.0.0.1/nsEventExample/eventListener ReferenceError: io is not defined client.js:647 Скрипт http://localhost:3001/socket.io/socket.io.js не грузится с сервера, вот и io не видит.

Ставил все по инструкции, только скачивал через composer и запускаю все на виртуалке с помощью vagrant(там дополнительно прокинул 3001 порт) $ php yiic node-socket start запускается и пишет все отлично. лог:

info: socket.io started Listening localhost:3001 Set origin: localhost:*

На самой виртуалке
wget -O - http://localhost:3001 выдает

Распознаётся localhost... ::1, 127.0.0.1 Устанавливается соединение с localhost|::1|:3001... сбой: В соединении отказано. Устанавливается соединение с localhost|127.0.0.1|:3001... соединение установлено. Запрос HTTP послан, ожидается ответ... 404 Not Found то есть, дело не п портах

nodejs я как понимаю почему то не запустился. Нужна помощь)

oncesk commented 10 years ago

Добрый день, сервер скорее всего работает

проверте

$> pgrep node
$> ps aux | grep node
tselishev-semen commented 10 years ago

[vagrant@localhost protected]$ pgrep node 1863 [vagrant@localhost protected]$ ps aux | grep node vagrant 1863 0.1 6.0 830320 28380 pts/0 Sl 15:18 0:01 node /vagrant/protected/vendor/oncesk/yii-node-socket/lib/php/../js/server/server.js vagrant 1928 0.0 0.1 103260 872 pts/0 S+ 15:51 0:00 grep node [vagrant@localhost protected]$

oncesk commented 10 years ago

сервер исправно работает, еще интерестно

$> netstat -tulpn
$> ifconfig

на вагрант запускать не приходилось так что сам с этим впервые сталкиваюсь :)

tselishev-semen commented 10 years ago

[vagrant@localhost protected]$ netstat -tulpn

(Not all processes could be identified, non-owned process info will not be shown, you would have to be root to see it all.) Active Internet connections (only servers) Proto Recv-Q Send-Q Local Address Foreign Address State PID/Program name
tcp 0 0 0.0.0.0:111 0.0.0.0:* LISTEN -
tcp 0 0 0.0.0.0:54260 0.0.0.0:* LISTEN -
tcp 0 0 0.0.0.0:22 0.0.0.0:* LISTEN -
tcp 0 0 127.0.0.1:3001 0.0.0.0:* LISTEN 1863/node
tcp 0 0 127.0.0.1:25 0.0.0.0:* LISTEN -
tcp 0 0 :::111 :::* LISTEN -
tcp 0 0 :::80 :::* LISTEN -
tcp 0 0 :::40561 :::* LISTEN -
tcp 0 0 :::22 :::* LISTEN -
tcp 0 0 ::1:25 :::* LISTEN -
udp 0 0 0.0.0.0:111 0.0.0.0:* -
udp 0 0 0.0.0.0:68 0.0.0.0:* -
udp 0 0 0.0.0.0:840 0.0.0.0:* -
udp 0 0 0.0.0.0:859 0.0.0.0:* -
udp 0 0 0.0.0.0:47326 0.0.0.0:* -
udp 0 0 :::111 :::* -
udp 0 0 :::47012 :::* -
udp 0 0 :::840 :::* -
[vagrant@localhost protected]$ ifconfig eth0 Link encap:Ethernet HWaddr 08:00:27:62:52:B8
inet addr:10.0.2.15 Bcast:10.0.2.255 Mask:255.255.255.0 inet6 addr: fe80::a00:27ff:fe62:52b8/64 Scope:Link UP BROADCAST RUNNING MULTICAST MTU:1500 Metric:1 RX packets:3709 errors:0 dropped:0 overruns:0 frame:0 TX packets:5808 errors:0 dropped:0 overruns:0 carrier:0 collisions:0 txqueuelen:1000 RX bytes:870302 (849.9 KiB) TX bytes:3992199 (3.8 MiB)

lo Link encap:Local Loopback
inet addr:127.0.0.1 Mask:255.0.0.0 inet6 addr: ::1/128 Scope:Host UP LOOPBACK RUNNING MTU:16436 Metric:1 RX packets:178 errors:0 dropped:0 overruns:0 frame:0 TX packets:178 errors:0 dropped:0 overruns:0 carrier:0 collisions:0 txqueuelen:0 RX bytes:16231 (15.8 KiB) TX bytes:16231 (15.8 KiB)

Вероятнее я что - то не так настроил:)

oncesk commented 10 years ago

получается что сокет слушает локальное соединение, попробуйте в конфиге выставить айпи адрес 10.0.2.15 вместо localhost

oncesk commented 10 years ago

и перезапустить сервер

tselishev-semen commented 10 years ago

тоже самое, только скрипт, с 10.0.2.15 пытается получить, но там без шансов что либо получить:) т.к сервер только на виртуалке запущен,

tselishev-semen commented 10 years ago

Настройка apache может как - то влиять на работоспособность? SendRoomEvent и SendRoomEvent работают вроде, по крайней мере без ошибок выполняются

oncesk commented 10 years ago

покажти логи сервера runtime/socket-transport.server.log , если эти ивенты работают там должны быть логи

tselishev-semen commented 10 years ago

info: socket.io started Listening 10.0.2.15:3001 Set origin: 10.0.2.15:* debug: client authorized info: handshake authorized JmoptAlF66oismbZ2Rac debug: setting request GET /socket.io/1/websocket/JmoptAlF66oismbZ2Rac debug: set heartbeat interval for client JmoptAlF66oismbZ2Rac debug: client authorized for debug: websocket writing 1:: debug: client authorized for /server debug: websocket writing 1::/server info: transport end (undefined) debug: set close timeout for client JmoptAlF66oismbZ2Rac debug: cleared close timeout for client JmoptAlF66oismbZ2Rac debug: cleared heartbeat interval for client JmoptAlF66oismbZ2Rac debug: discarding transport debug: client authorized info: handshake authorized 73gix2ZTSZFwurhF2Rad debug: setting request GET /socket.io/1/websocket/73gix2ZTSZFwurhF2Rad debug: set heartbeat interval for client 73gix2ZTSZFwurhF2Rad debug: client authorized for debug: websocket writing 1:: debug: client authorized for /server debug: websocket writing 1::/server info: transport end (undefined) debug: set close timeout for client 73gix2ZTSZFwurhF2Rad debug: cleared close timeout for client 73gix2ZTSZFwurhF2Rad debug: cleared heartbeat interval for client 73gix2ZTSZFwurhF2Rad debug: discarding transport

с localhost вместо 10.0.2.15 аналогичная тематика

oncesk commented 10 years ago

получается, что коннект из php есть

в браузере что нибудь изменилось если использовать ip или может localhost заработал)?

tselishev-semen commented 10 years ago

внешне никаких измнений, страничка сначала подвисает(ожидает загрузки скрипта) Потом как допустимый таймаут проходит, грузится как может. И в консоле выдает io is not defined client.js:647 Firebug пишет о неудачной загрузке скрипта.

По vagrant и websocket только вот этот пост есть https://stellartalk.org/topic/1288-vagrant-and-websocket-connection/ и там похоже тоже не все так солнечно :)

Попробую на ноде + вагрант хелло ворлд с сокетами сделать, может прояснит в чем дело, больше уже никаких идей нет) давно мучаюсь)

oncesk commented 10 years ago

эммм, а в браузре какой адресс сайта? домен? localhost или другой?

лучше использовать один и тот же домен если использовать допустим test

то в браузере test то в /etc/hosts можно добавить айпи который у вас в вагранте этому домену

ну в любом случае попробуйте hello world

tselishev-semen commented 10 years ago

http://localhost:8080/ на моей машине. http://localhost:80/ на виртуалке Немного вопрос не понял) В вагранте есть несколько способов доступа к виртуалке: по заданному ip, пробрасывание портов... У меня просто порты пробрасываются, и доступ к машине по localhost всегда

tselishev-semen commented 10 years ago

конечно интересно что php без проблем коннектиться(в дебаге еще раз убедился), а клиент не может получить ресурс с сервера

.htaccess deny from all

Или что то похожее не может быть причиной случайно?

oncesk commented 10 years ago

не, htaccess тут не мешает и не поможет, 3001 порт также проброшен, эмм, если будет время попробую у себя такую ситуацию создать

скрипт который не подгружается загружается с 3001 порта по localhost, попробуйте в браузере набрать http://10.0.2.15:3001/socket.io/socket.io.js и http://localhost:3001/socket.io/socket.io.js

tselishev-semen commented 10 years ago

Проблема решена. 1 часть. в Vagrant вместо "forwarded_port" необходимо использовать "private_network ". https://docs.vagrantup.com/v2/networking/private_network.html Затем в конфиге:

  'host' => 'ip приватной сети указанной в вагранте"
        'port' => 3001  

2.часть возможен баг Cross-Origin Request Blocked: The Same Origin Policy disallows reading the remote resource at http://localhost:3001/socket.io/1/?t=1410631220488. This can be fixed by moving the resource to the same domain or enabling CORS.

Необходимо почистить assets

tselishev-semen commented 10 years ago

Возможно что vagrant как то неполноценно пробрасывает порты. Был установлен проброс 80 на 8080 и 3001 на 3001 в такой связке не работало, просто не грузило http://localhost:3001/socket.io/socket.io.js Вобще помогла вот эта статья http://forum.bittorrent.com/topic/30058-cross-origin-request-blocked/ натолкнула на мысль что необходимо избавиться от порта. И проблема возможна связана с тем, что приходится указывать явно порт localhost:8080

oncesk commented 10 years ago

угу, если все работает - замечательно! :)

tselishev-semen commented 10 years ago

каким то образом заработало) спасибо за потраченное время)

oncesk commented 10 years ago

кстати в examples которые для php есть пару багов так как естеншн обновился а примеры нет =)

пожалуйста

tselishev-semen commented 10 years ago

ну там только два бага я нашел пока) Yii::app()->nodeSocket->getFrameFactory()->createEventFrame(); заместо Yii::app()->nodeSocket->createEventFrame(); несложно было исправить)