2016-12-24 113 views
1

我在標準的PHP/Apache平臺上有一個現有的Web應用程序。現在,我想要添加聊天功能,並且我希望它能夠通過websocket進行實時更新,爲此,我在nodejs上稍微研究了一下socket.io。因此,除了運行大型PHP應用程序的Apache外,我還會使用socket.io運行聊天的nodejs。通過websocket添加聊天到現有的PHP網絡應用程序

但是我不明白的是,如何在nodejs聊天的代碼中識別我的用戶?首先,Apache和nodejs將無法在同一個端口上運行,這意味着我將在端口8080上運行聊天,例如,在這種情況下,我會丟失用戶的Cookie,這意味着我現在必須讓他們登錄如果他們想使用聊天,再次在這個nodejs-powered端口上?看起來很荒謬,但我不知道該怎麼辦。

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

任何提示讚賞。

+0

您可以在PHP中運行WebSocket的服務器,假設你可以適當地配置您的服務器。 – Dai

+0

如果你切換到Nginx,你可以在同一個端口上使用相同的URL,例如'exampe.com/chat'指向nodejs系統,其他的指向PHP系統。 –

+0

[我的回答](https://stackoverflow.com/questions/41316681/adding-chat-through-websocket-to-an-existing-php-web-app/41317209#41317209)下面有幫助嗎?任何意見? – rsp

回答

1

您可以在PHP上運行Apache。端口3001和端口3002上的Node應用程序,並將nginx配置爲反向代理以使它們都可用於端口80,例如根目錄/目錄中的PHP應用程序和/chat目錄中的Node應用程序,其中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的配置。

看到這個答案,其意見的更多詳細信息:

+0

如何配置兩個運行在兩個機器上的流程與gunicorn?我們是否需要爲具有私有IP的服務啓用nginx並在主nginx內調用? –

相關問題