带有apache mod_proxy的Websocket不';行不通
我已经做了很好的准备:Apache2.4+PHP7+WebSocket带有apache mod_proxy的Websocket不';行不通,websocket,mod-proxy,apache2.4,Websocket,Mod Proxy,Apache2.4,我已经做了很好的准备:Apache2.4+PHP7+WebSocket 访问此链接查看我的准备工作 详细信息: 但是当我运行一个简单的WebSocket演示时,我遇到了一些问题。我不知道如何解决它们 Websocket对我来说是一个新概念。我了解到Apache2.4支持带有mod\u proxy\u wstunnel的WebSocket。因此 我的步骤: 编辑httpd.conf,加载mod_proxy和mod_proxy\u wstunnel(当然这两个都在apachedir/modules中
访问此链接查看我的准备工作
详细信息:
但是当我运行一个简单的WebSocket演示时,我遇到了一些问题。我不知道如何解决它们 Websocket对我来说是一个新概念。我了解到Apache2.4支持带有
mod\u proxy\u wstunnel的WebSocket。因此
我的步骤:
编辑httpd.conf,加载mod_proxy
和mod_proxy\u wstunnel
(当然这两个都在apachedir/modules中)
LoadModule proxy\u modules/mod\u proxy.so
LoadModule proxy\u wstunnel\u module modules/mod\u proxy\u wstunnel.so
添加代理(仍在httpd中)
ProxyPass/ws://10.180.0.123/
ProxyPassReverse/ws://10.180.0.123/
创建HTML客户端和PHP服务器(cd-apachedir/htdocs
)
client.html
var socket=newwebsocket(“ws://10.180.0.123/server.php”);
socket.onopen=函数(e){
console.log(“打开成功”);
}
socket.onmessage=函数(e){
控制台日志(“mes:+e”);
}
//socket.close();
socket.send(“你好世界”);
server.php
4.启动apache
/usr/local/apache2/bin/apachectl start
我的问题是:
当我打开:10.180.0.123/client.html
时,我得到了以下错误:
Uncaught InvalidStateError:未能对“WebSocket”执行“发送”:仍处于连接状态。
到“ws://10.180.0.123/server.php”的WebSocket连接失败:WebSocket握手期间出错:意外响应代码:200
我想我应该在server.php
中编写一些代码,然后运行它。我说得对吗?我应该写什么呢。我没有找到任何关于谷歌的信息
当我打开:10.180.0.123/ws/client.html
时,我会得到以下Apache错误日志
[Wed Sep 28 00:14:54.063989 2016][proxy:warn][pid 6646:tid 140326217934592][client 10.230.0.93:57508]AH01144:URL/ws/client.html没有有效的协议处理程序。如果您使用的是DSO版本的mod_proxy,请确保使用LoadModule的配置中包含代理子模块。
似乎未加载代理模块,但请参见我的屏幕截图:
返回“hello”的PHP脚本不是WebSocket服务器
您需要运行实际的WebSocket服务器,并将代理配置指向它
寻找基于PHP的WebSocket服务器
当WebSocket服务器运行时,需要设置Apache配置
假设它在同一台机器和端口8080上运行:
ProxyPass /ws ws://localhost:8080/
ProxyPassReverse /ws ws://localhost:8080/
在client.html
中,你应该将你的WebSocket连接到ws://10.180.0.123/ws
谢谢你的回复。你能告诉我mod_proxy_wstunel和Ratchet之间的关系吗?我可以在mod_proxy_wstunel上构建我的WebSocket服务器吗?我还需要Ratchet吗?mod proxy_wstunel
只是Apache的一个模块,因此代理支持WebSocket。如果希望从与web服务器相同的端口为WebSocket连接提供服务,或者支持SSL加密的WebSocket连接,而不需要实际的WebSocket来支持,则只需要反向代理。但是你肯定需要一个单独的服务器来服务像Ratchet这样的WebSocket。你的解释很清楚。非常感谢。你对我的第二期有什么想法吗:[Wed Sep 28 00:14:54.063989 2016][proxy:warn][pid 6646:tid 140326217934592][client 10.230.0.93:57508]AH01144:没有协议处理程序对URL/ws/client.html有效。如果您使用的是DSO版本的mod_proxy,请确保使用LoadModule的配置中包含代理子模块。