HTML5 Websocket работает только на локальном хосте - PullRequest
13 голосов
/ 15 августа 2010

Я следовал учебному руководству по веб-сокету HTML5 на следующем веб-сайте:

http://net.tutsplus.com/tutorials/javascript-ajax/start-using-html5-websockets-today/

Это работало хорошо, затем я изменил значение хоста с "localhost: 8080" на "218.175.192.160: 8080 "(мой ip) на странице на стороне клиента, на стороне сервера все еще сохраняется" localhost: 8080 ".

Оказывается, я могу просматривать страницу в браузере (apache), например, с протоколом http"http://218.175.192.160:8080/client.html", однако сокет на стороне клиента не может подключиться к" ws: //218.175.192.160: 8080 / daemon.php ". (Отредактированная опечатка)

мои вопросы: 1на стороне клиента, почему websocket работает только на "ws: // localhost: 8080 / daemon.php", а не на "ws: //218.175.192.160: 8080 / daemon.php"?

2.почему socket_bind ($ socket, "127.0.0.1", 8080) работает, а socket_bind ($ socket, "218.175.192.160", 8080) выдает ошибку? система напоминает "невозможно связать адрес [0]: запрошенный адрес не являетсядействителен в его контексте ". Я уверен, что IP-адрес принадлежит моему серверу.

Пожалуйста, помогите, спасибо.

Я нашелпричина ошибки: привязка неправильного адреса, потому что я использовал маршрутизатор, хотя я настроил службу NAT на маршрутизаторе, но я забыл, что адрес «218.175.192.160» принадлежит интерфейсу маршрутизатора, а не моей машине сервера.

адрес сервера должен быть локального типа адреса, например: «192.168.1.2», который действительно находится на интерфейсе локальной сети.

извините, что я забыл основные настройки сети :(, надеюсь, этот пост поможет сети новичку, как я, спасибо ~:)

Ответы [ 4 ]

2 голосов
/ 16 августа 2010

Я считаю, что одна и та же политика происхождения применяется как к веб-сокетам, так и к портам сервера, поэтому клиент и сервер должны совпадать, иначе соединение не будет установлено.

В вашем примере вы использовали:

http://218.175.192.160:8080/client.html
ws://218.175.192.160/daemon.php

Я не уверен, что это просто опечатка, но это должно быть

http://218.175.192.160:8080/client.html
ws://218.175.192.160:8080/daemon.php
1 голос
/ 26 апреля 2013

Вместо socket_bind( $socket, "127.0.0.1", 8080 ), который говорит, что он разрешает запросы только от localhost, привязывается к '0.0.0.0', который разрешает запросы с любого IP.

Так что сделайте это socket_bind( $socket, "0.0.0.0", 8080 ) и оно будет работать.

1 голос
/ 25 августа 2010

У меня тоже была эта проблема.

Проблема в том, что вы, скорее всего, ссылаетесь на IP-адрес вашего МАРШРУТИЗАТОРА.Вам нужно обратиться к IP-адресу вашего КОМПЬЮТЕРА.

Это работает для localhost, потому что localhost указывает на ваш отдельный компьютер, а не на ваш маршрутизатор.

1 голос
/ 16 августа 2010

Вы все еще используете 'localhost' для инициализации своего сервера PHP таким образом?:

public function __construct($host='localhost',$port=8000,$max=100)  

Если вы сделаете это, сервер будет связываться только с интерфейсом localhost.Даже если вы правильно обслуживаете файл из Apache, похоже, что код phpwebsockets необходимо настроить для внешнего IP-адреса.

...