我正在尝试使用Cloud Foundry(在IBM Cloud上)水平扩展Socket.io Node.js服务器。
到目前为止,我的cf的manifest.yml如下所示:
applications:
- name: chat-app-server
memory: 512M
instances: 2
buildpacks:
- nginx_buildpack
这样就可以完成部署,但是由于连接不是粘性的,因此客户端和服务器之间的套接字连接当然会失败。
官方的Socket.io文档提供了一个使用NginX来使用多个节点的示例。使用通过Socket.io模板使用自定义nginx.conf文件时,我缺少一些信息(以???突出显示)。
events { worker_connections 1024; }
http {
server {
listen {{port}};
server_name ???;
location / {
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
proxy_set_header Host $host;
proxy_pass http://nodes;
proxy_http_version 1.1;
proxy_set_header Upgrade $http_upgrade;
proxy_set_header Connection "upgrade";
}
}
upstream nodes {
# enable sticky session based on IP
ip_hash;
server ???:???;
server ???:???;
}
}
我试图找出Cloud Foundry在哪里运行manifest.yml文件中指定的两个实例,但是没有运气。
如何从Cloud Foundry获取所需的服务器地址/端口?有没有办法从CF动态获取此信息?
我正在使用部署我的应用程序cf push
。
我以前没有使用过Socket.IO,所以我可能不满意,但是从快速阅读文档开始,似乎一切都可以正常进行。
来自文档的两点:
a。)使用WebSockets时,这不是问题。Cloud Foundry完全支持WebSockets。希望您的大多数客户都能做到这一点。
b。)当退回长时间轮询时,您需要进行粘性会话。Cloud Foundry开箱即用地支持粘性会话,因此,再次可以使用。关于CF对粘性会话的支持,有一个警告,它期望会话cookie名称为JSESSIONID
。
同样,我对Socket.IO不太熟悉,但是我怀疑默认情况下它可能使用的是不同的会话cookie名称(Java之外的大多数东西都使用)。您只需要将会话Cookie名称更改为JSESSIONID
,便可以使用粘性会话。
提示:您可以通过在浏览器的开发工具中查看cookie来检查会话cookie名称。
最后说明。您根本不需要Nginx。Cloud Foundry的路由层Gorouter将为您处理粘性会话支持。
本文收集自互联网,转载请注明来源。
如有侵权,请联系[email protected] 删除。
我来说两句