我不确定是否要问正确的问题。但是请帮助我解决这个问题。
我正在使用PHP和websocket实现实时聊天应用程序。我位于仅允许80和443的防火墙后面,因此我打算仅使用这两个端口。我尝试了两种方法:
我认为应该使用端口80下载网页,但websocket必须使用另一个端口(即443)。
...
$port = 443;
socket_bind($socket, $host, $port);
...
但是,我收到如下错误消息。
PHP Warning: socket_bind(): unable to bind address [13]: Permission denied in /home/cabox/workspace/a/b/c/server/class.PHPWebSocket.php on line 121
这意味着websocket无法使用443,不是吗?
根据manual,我删除了$port
参数,然后php文件运行无误。
是否暗示HTTP服务器和套接字服务器都使用端口80?
但是在客户端,我看到错误WebSocket connection to 'ws://xxx.com/' failed: Error during WebSocket handshake: Unexpected response code: 200
。
有什么办法吗?
我希望得到帮助。
答案 0 :(得分:1)
$ port参数仅是可选参数,因为AF_UNIX协议不使用它。但是,正如我猜想的那样,如果您使用AF_INET协议(请参见socket_create()选项),则必须指定要在套接字绑定中使用的端口。
端口80和443用于HTTP和HTTPS。恐怕如果您不想覆盖它们,则必须在防火墙中打开另一个端口。