我做了很好的准备:Apache 2.4 + PHP7 + WebSocket
访问此链接以查看我的准备工作
详情:Cannot load modules/mod_proxy_wstunnel.so into server
但是当我运行一个简单的WebSocket演示时,我遇到了一些问题。我不知道如何解决它们。
Websocket对我来说是一个新概念。我了解到Apache 2.4支持mod_proxy_wstunnel.so
的WebSockets
我的步骤:
mod_proxy
和mod_proxy_wstunnel
(当然两者都在apachedir / modules中)LoadModule proxy_module modules/mod_proxy.so
LoadModule proxy_wstunnel_module modules/mod_proxy_wstunnel.so
ProxyPass /ws ws://10.180.0.123/
ProxyPassReverse /ws ws://10.180.0.123/
cd apachedir/htdocs
)client.html
<html>
<script>
var socket = new WebSocket("ws://10.180.0.123/server.php");
socket.onopen = function(e){
console.log("open success");
}
socket.onmessage = function(e){
console.log("mes:"+e);
}
//socket.close();
socket.send("Hello World");
</script>
<html>
server.php
<?php
echo "hello";
?>
4.start apache
/usr/local/apache2/bin/apachectl start
我的问题:
10.180.0.123/client.html
时,出现以下错误:Uncaught InvalidStateError: Failed to execute 'send' on 'WebSocket': Still in CONNECTING state.
WebSocket connection to 'ws://10.180.0.123/server.php' failed: Error during WebSocket handshake: Unexpected response code: 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: No protocol handler was valid for the URL /ws/client.html. If you are using a DSO version of mod_proxy, make sure the proxy submodules are included in the configuration using LoadModule.
似乎没有加载代理模块,但请看我的屏幕截图:
答案 0 :(得分:3)
返回“hello”的PHP脚本不是WebSocket服务器。
您需要运行实际的WebSocket服务器并将代理配置指向它。
查看基于PHP的WebSocket服务器的Ratchet。
当您运行WebSocket服务器时,您需要设置Apache配置。
假设它在同一台机器和8080端口上运行:
ProxyPass /ws ws://localhost:8080/
ProxyPassReverse /ws ws://localhost:8080/
在client.html
内,您应将WebSocket连接到ws://10.180.0.123/ws
。