php - 带有 apache 虚拟主机的 Websocket

标签 php apache websocket vhosts ratchet

我有两个用于两个不同应用程序的 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。

基于 ratchet php 的两个应用程序都有 php 服务器服务.
但是应用程序连接到同一个 php 服务器(已首先启动)。

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

最佳答案

您不能在同一个端口上运行两个 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 应用程序具有完全不同的逻辑,则第一种方法更可取。

关于php - 带有 apache 虚拟主机的 Websocket,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/27256844/

相关文章:

php - 如何为外部应用程序代表用户安全地存储多个密码?

php - 'locals_id' 中的未知列 'where clause'

php - 在 PHP 脚本中设置 lc_time_names 没有响应

php - 卡在wampserver : it is in yellow mode

android - 在 Android 中使用 websocat 连接到 WSS

c# - Websocket上的数据顺序不正确

php - 如何在 PHP 中以特定用户身份运行外部命令

Apache tomcat部署

apache - 名称虚拟主机 * :80 has no VirtualHosts

c++ - 如何将超过 65536 字节的二进制数据编码为 C++ 上的 websocket 帧