簡體   English   中英

通過websocket添加聊天到現有的PHP Web應用程序

[英]Adding chat through websocket, to an existing PHP web app

我在標准的PHP / Apache平台上有一個現有的Web應用程序。 現在,我想要的是添加聊天功能,我希望它在websocket上是實時的,並且為此我已經在nodejs上研究了一些socket.io。 所以除了運行大型PHP應用程序的Apache之外,我還會使用socket.io運行chat的nodejs。

但我真的不明白的是,我如何在代碼中識別我的用戶nodejs聊天? 首先,Apache和nodejs將無法在同一端口上運行,這意味着我將在端口8080上運行聊天,在這種情況下我丟失了用戶的cookie,這意味着我現在必須要求他們登錄如果他們想使用聊天,再次在這個nodejs支持的端口上? 看起來很荒謬,但我不知道該走哪條路。

當然,我無法將我的整個代碼移植到nodejs上。 理想情況下,我希望Apache和nodejs共存。 或者我只是完全誤解了聊天應該如何在網絡應用中發揮作用。

任何提示贊賞。

您可以在端口3001上使用PHP運行Apache,在端口3002上運行Node應用程序,並將nginx配置為反向代理,以使它們在端口80上都可用,例如root /目錄中的PHP應用程序和Node應用程序在/chat目錄中,使用nginx配置如下:

server {
    listen 80;
    server_name example.com;
    location /chat {
        proxy_pass http://localhost:3002;
        proxy_http_version 1.1;
        proxy_set_header Upgrade $http_upgrade;
        proxy_set_header Connection "upgrade";
        proxy_set_header Host $host;
    }
    location / {
        proxy_pass http://localhost:3001;
        proxy_http_version 1.1;
        proxy_set_header Upgrade $http_upgrade;
        proxy_set_header Connection "upgrade";
        proxy_set_header Host $host;
    }
}

使用SSL,它會稍微復雜一點,但不是那么多:

server {
    listen 443;
    server_name example.com;
    add_header Strict-Transport-Security "max-age=3600";
    ssl on;
    ssl_certificate /.../chained2.pem;
    ssl_certificate_key /.../domain.key;
    ssl_session_timeout 5m;
    ssl_protocols TLSv1 TLSv1.1 TLSv1.2;
    ssl_ciphers ECDHE-RSA-AES256-GCM-SHA384:ECDHE-RSA-AES128-GCM-SHA256:DHE-RSA-AES256-GCM-SHA384:ECDHE-RSA-AES256-SHA384:ECDHE-RSA-AES128-SHA256:ECDHE-RSA-AES256-SHA:ECDHE-RSA-AES128-SHA:DHE-RSA-AES256-SHA:DHE-RSA-AES128-SHA;
    ssl_session_cache shared:SSL:50m;
    ssl_prefer_server_ciphers on;

    location /chat {
        proxy_pass http://localhost:3002;
        proxy_http_version 1.1;
        proxy_set_header Upgrade $http_upgrade;
        proxy_set_header Connection "upgrade";
        proxy_set_header Host $host;
    }

    location / {
        proxy_pass http://localhost:3001;
        proxy_http_version 1.1;
        proxy_set_header Upgrade $http_upgrade;
        proxy_set_header Connection "upgrade";
        proxy_set_header Host $host;
    }

}

您的PHP和Node應用程序甚至可以在不同的服務器上運行 - 只需在nginx配置中使用它們的地址即可。

有關詳細信息,請參閱此答案及其注釋:

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM