[英]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.