HTML5 Websocket仅适用于localhost

时间:2010-08-15 19:44:24

标签: php html5 ip-address localhost websocket

我遵循了以下网站的HTML5 Websocket教程:

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

运行良好,然后我在主机端页面中将主机值从“localhost:8080”更改为“218.175.192.160:8080”(我的ip),服务器端仍保留“localhost:8080”。

事实证明我可以使用http协议在浏览器(apache)中查看页面,例如“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”,它实际上位于lan卡接口上。

抱歉,我忘记了基本的网络设置:(希望这篇文章有助于像我这样的网络新手,thx~:)

4 个答案:

答案 0 :(得分:2)

我认为相同的原始策略适用于websockets和服务器端口,因此客户端和服务器都必须匹配,否则连接将失败。

在您的示例中,您使用了:

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 :(得分:1)

您是否仍然使用'localhost'以这种方式初始化您的PHP服务器?:

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

如果执行此操作,则服务器将仅绑定到localhost接口。即使您正在从Apache正确提供文件,似乎仍需要为外部IP配置phpwebsockets代码。

答案 2 :(得分:1)

我也有这个问题。

问题是你很可能是指你的ROUTER的IP地址。您需要做的是参考您的COMPUTER的IP地址。

适用于localhost,因为localhost指向您的个人计算机,而不是您的路由器。

答案 3 :(得分:1)

而不是socket_bind( $socket, "127.0.0.1", 8080 ),它告诉它只允许来自localhost的请求,而是绑定到允许来自任何IP的请求的“0.0.0.0”。

所以,让它socket_bind( $socket, "0.0.0.0", 8080 ),它会起作用。