我面临与线程Closing old php websocket
相关的相同问题正在使用Websockets创建一个简单的聊天服务器。我有 当我运行创建的PHP脚本时,一切正常 我的服务器上的websocket第一次。如果脚本停止了 某些原因,我试图重新运行它,我得到一个错误说,该 脚本无法绑定套接字,因为它已经存在。
如何创建一个脚本来查找这个旧套接字(假设我知道它正在运行哪个端口)并关闭它以便我可以建立新的连接?
在我的本地服务器中,我曾经用来获取并终止进程。
netstat -lntu
然后杀死那个过程。
sudo kill $(sudo lsof -t -i:9064) ,9064 is the port.
任何建议都会有所帮助。
答案 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 的更可靠的情况。