2016-12-24 115 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内调用? –

相关问题