Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/xamarin/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
带有apache mod_proxy的Websocket不';行不通_Websocket_Mod Proxy_Apache2.4 - Fatal编程技术网

带有apache mod_proxy的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中

我已经做了很好的准备:Apache2.4+PHP7+WebSocket
访问此链接查看我的准备工作
详细信息:
但是当我运行一个简单的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的配置中包含代理子模块。