使用Elastic Beanstalk Web控制台,我推出了一个新的Web Server 1.0环境:
我成功压缩了&通过控制台上传我的代码:
的package.json
{
"name": "cool",
"version": "0.0.0",
"dependencies": {
"ws": "0.4.x"
}
}
server.js
var wss = new (require('ws')).Server({port: (process.env.PORT || 3000)})
wss.on('connection', function(ws) {
console.log('connected')
ws.on('message', function(message) {
console.log(message)
ws.send(message)
});
ws.on('close', function() {
console.log('disconnected')
})
})
我也尝试过包含node_modules
目录。
跑完后:
wscat -c ws://default-environment-xxxxxxxxxx.elasticbeatalk.com/
我回来了:
Error: unexpected server response (200)
如何找到有关该错误的更多信息?
亚马逊将PORT环境变量设置为8080.所以,我也尝试过:
wscat -c ws://default-environment-xxxxxxxxxx.elasticbeatalk.com:8080/
但是,那只是挂了然后又回来了:
Error: connect ETIMEDOUT
此外,当我建立一个WebSocket连接时,我希望服务器允许它无限期地保持打开状态,这与Heroku的WebSocket实现不同,后者在60秒后超时。
是否有关于如何执行此操作的详细教程?
答案 0 :(得分:1)
如果您已正确设置package.json
文件(主要是在--save
时使用npm install
),那么您不必包含node_modules目录。
检查process.env.PORT
设置是否未更改侦听端口 - AWS EB通常将端口设置为8081。
要查找报告的端口,可以在代码中添加console.log(process.env.PORT)
,然后通过ssh连接到服务器并运行tail -f var/log/nodejs/nodejs.log
(这将监视node.js的日志输出)。然后再次点击服务器,看看ssh连接的日志输出中显示的端口。
要调查您遇到的错误,请添加ws.on('error',...)
功能并记录您想要的内容。
答案 1 :(得分:0)
好吧,经过相当多的搜索后,我找到了一个解决方案,无需更改ELB的任何内容,也无需将代理设置为无(我使用nginx)。
所有你需要的是:
.ebextensions
目录(如果它尚不存在)01_nginx.config
在此文件中,输入以下代码: container_commands:
01_nginx_websockets:
command: |
sed -i '/\s*proxy_set_header\s*Connection/c \
proxy_read_timeout 36000s; \
proxy_set_header Upgrade $http_upgrade; \
proxy_set_header Connection "upgrade"; \
' /tmp/deployment/config/#etc#nginx#conf.d#00_elastic_beanstalk_proxy.conf
将代码部署到弹性beanstalk并享受websockets连接!
PS:你真的不需要proxy_read_timeout
属性集,我只是将它用于我自己的属性集。此外,它似乎没有那么多,我会继续寻找。