PHP websockets socket.bind()失败。关闭旧的php websocket

时间:2016-07-18 13:26:07

标签: php websocket drupal-7

我面临与线程Closing old php websocket

相关的相同问题
  

正在使用Websockets创建一个简单的聊天服务器。我有   当我运行创建的PHP脚本时,一切正常   我的服务器上的websocket第一次。如果脚本停止了   某些原因,我试图重新运行它,我得到一个错误说,该   脚本无法绑定套接字,因为它已经存在。

如何创建一个脚本来查找这个旧套接字(假设我知道它正在运行哪个端口)并关闭它以便我可以建立新的连接?

在我的本地服务器中,我曾经用来获取并终止进程。

netstat -lntu

然后杀死那个过程。

sudo kill $(sudo lsof -t -i:9064) ,9064 is the port.

任何建议都会有所帮助。

1 个答案:

答案 0 :(得分:0)

我喜欢在套接字启动时将我的 pid 存储到一个文件中。

if (!file_put_contents(self::WEBSOCKET_ACTIVE_PID, getmypid())) {
    print 'Failed to store PID to file.';
    exit(1);
}

然后可以在 shell 中运行以下内容。

kill -15 `cat websocket_pid.txt` || rm websocket_pid.txt || echo 'It does not look like a socket is running on this subdomain.'

请注意,您可能会考虑使用 php signal handler 的更可靠的情况。