4

首先,我可以看到已经解决了围绕该问题的问题。

PHP web socket无法绑定socket

设置套接字服务器的问题

socket_bind():无法绑定地址 [99](Amazon EC2 上的 Ubuntu)

和许多其他资源,他们都说问题是在使用的端口或外部IP等。

但我无法克服它。我的服务器在 CentOS 6.3 上运行并使用 CPanel(它是 HP 服务器https://www.hpcloud.com/)。

我得到的网络套接字演示源代码位于https://code.google.com/p/phpwebsocket/

我的设置是

$master  = WebSocket("127.0.0.1",4444); // even I tried with localhost, they worked same

这是我尝试的步骤和相应的错误:

1/。我尝试了以下命令以确保我正在使用的端口可供使用

$ lsof|grep 4444

$ netstat -a -p -n

但是我总是得到错误,虽然这个端口 4444 是免费的

警告:socket_bind():无法绑定地址 [98]:地址已在第 60 行的 /home/myapp/public_html/websocket/server.php 中使用

2/。奇怪的是当我检查正在使用的端口 835

 crond      1621      root  DEL       REG              252,1               39835 /lib64/libpam.so.0.82.2.#prelink#.B1eyGx

atd        1633      root  DEL       REG              252,1               39835 /lib64/libpam.so.0.82.2.#prelink#.B1eyGx 

有趣的事情发生了:

然后我在终端命令 shell 上运行 server.php

 php /home/myapp/public_html/websocket/server.php

错误已经消失,而不是

服务器启动时间:2013-08-16 03:19:54

主套接字:资源 ID #4

监听:127.0.0.1 端口 835

我以为它开始工作了,但实际上并没有,因为当我server.php通过浏览器打开 URL时

http://mysite/server.php

错误是“权限被拒绝”

警告:socket_bind() [function.socket-bind]: 无法绑定地址 [13]: Permission denied in /home/myapp/public_html/websocket/server.php on line 60 socket_bind() failed

编辑:关于权限,我可以在与 server.php 相同的级别目录中打开 client.html 没有问题。文件夹代码权限为 755,用户不是 root。我所有的命令都是在 root 权限下实现的

任何帮助是极大的赞赏 :(

4

1 回答 1

0

我认为问题在于您正试图在您的网络浏览器中加载 Websocket 服务器。最有可能的是,apache 用户的安全设置不允许您的服务器侦听不常见的端口。

CentOS 通常默认启用 SELinux。CentOS Linux 对 Apache 的部分安全策略是,默认情况下,Apache 将只允许服务访问与 HTTP 相关的公认端口(即端口 80、8080 等)。

启用 SELinux 后,您可以允许 Apache 侦听 tcp 端口 4444,方法是使用“semanage”命令添加一条规则以允许在 SELinux 中进行侦听:

~$ semanage port -a -t http_port_t -p tcp 4444 
于 2013-09-10T03:13:10.910 回答