gpt4 book ai didi

带有 apache mod_proxy_wstunnel 的 Websocket 不起作用

转载 作者:行者123 更新时间:2023-12-04 02:22:40 27 4
gpt4 key购买 nike

我已经做好了准备:Apache 2.4 + PHP7 + WebSocket
访问此链接以查看我的准备工作
详情:Cannot load modules/mod_proxy_wstunnel.so into server
但是当我运行一个简单的 WebSocket 演示时,我遇到了一些问题。我不知道如何解决它们。

Websocket 对我来说是一个新概念。我了解到 Apache 2.4 支持带有 mod_proxy_wstunnel.so 的 WebSockets .
我的步骤:

  • 编辑httpd.conf,加载mod_proxymod_proxy_wstunnel (当然两者都在 apachedir/modules 中)

  • LoadModule proxy_module modules/mod_proxy.so
    LoadModule proxy_wstunnel_module modules/mod_proxy_wstunnel.so
  • 添加代理(仍在 httpd 中)

  • ProxyPass /ws ws://10.180.0.123/
    ProxyPassReverse /ws ws://10.180.0.123/
  • 创建 HTML 客户端和 PHP 服务器 ( cd apachedir/htdocs )

  • 客户端.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>

    服务器.php

    <?php
    echo "hello";
    ?>

    4.启动 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.

    似乎代理模块没有被加载,但看我的截图:

    loaded modules screenshot

    最佳答案

    返回“hello”的 PHP 脚本不是 WebSocket 服务器。

    您需要运行一个实际的 WebSocket 服务器并将您的代理配置指向它。

    查看 Ratchet用于基于 PHP 的 WebSocket 服务器。

    当您运行 WebSocket 服务器时,您需要设置您的 Apache 配置。

    假设它在同一台机器上和端口 8080 上运行:

    ProxyPass /ws ws://localhost:8080/
    ProxyPassReverse /ws ws://localhost:8080/

    在您的 client.html 内,您应该将您的 WebSocket 连接到 ws://10.180.0.123/ws .

    关于带有 apache mod_proxy_wstunnel 的 Websocket 不起作用,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/39742051/

    27 4 0
    Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
    广告合作:1813099741@qq.com 6ren.com