【问题标题】:Websocket with apache vhosts带有 apache 虚拟主机的 Websocket
【发布时间】:2015-01-31 03:18:32
【问题描述】:

我有两个 apache 虚拟主机用于两个不同的应用程序:

<VirtualHost *:80>
    Servername socket1.app
    DocumentRoot d:\xampp\htdocs\socket1.app
    <Directory d:\xampp\htdocs\socket1.app>
        Allow from all
        AllowOverride All
        Order allow,deny
    </Directory>
</VirtualHost>

<VirtualHost *:80>
    Servername socket2.app
    DocumentRoot d:\xampp\htdocs\socket2.app
    <Directory d:\xampp\htdocs\socket2.app>
        Allow from all
        AllowOverride All
        Order allow,deny
    </Directory>
</VirtualHost>

当我打开 http://socket1.app 时,它会向 ws://socket1.app:8080 发送连接请求并 http://socket2.app 发送到 ws://socket2.app:8080。

A 为基于ratchet php 的两个应用程序提供 php 服务器服务。 但应用程序连接到同一个 php 服务器(已先启动)。

我如何将这个套接字连接划分为每个应用程序 php 服务器服务?

【问题讨论】:

    标签: php apache websocket vhosts ratchet


    【解决方案1】:

    您不能在同一个端口上运行两个 websocket 服务器实例。

    您必须在不同的端口(例如 8080 和 8081)上运行它们,或者根据主机名划分应用逻辑。

    在 RatchetPHP 中,您可以这样做:

    public function onMessage(ConnectionInterface $conn, $msg)
    {
        // The host name that the client connected to (socket1.app or socket2.app)
        $host = $conn->WebSocket->request->getHost();
    
        // ... some logic depending on the host name
        // if ($host == 'socket1.app')
        // { 
        // ...
        // }
    }
    

    如果您的 websocket 应用程序具有完全不同的逻辑,则第一种方法更可取。

    【讨论】:

    • 感谢您的回答,我已经为应用程序使用了不同的端口。关于你的代码块,我不需要在代码中检查主机,因为应用程序是完全不同的。
    猜你喜欢
    • 1970-01-01
    • 2015-04-09
    • 2014-12-24
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-01-29
    • 2014-01-06
    • 2011-06-19
    相关资源
    最近更新 更多