Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/node.js/37.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/list/4.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
如何将Node.js WebSocket服务器部署到Amazon Elastic Beanstalk?_Node.js_Deployment_Websocket_Amazon Elastic Beanstalk - Fatal编程技术网

如何将Node.js WebSocket服务器部署到Amazon Elastic Beanstalk?

如何将Node.js WebSocket服务器部署到Amazon Elastic Beanstalk?,node.js,deployment,websocket,amazon-elastic-beanstalk,Node.js,Deployment,Websocket,Amazon Elastic Beanstalk,使用Elastic Beanstalk web控制台,我启动了一个新的web Server 1.0环境,其中包括: 预定义配置:Node.js,64位Amazon Linux 2014.09 v1.0.9 环境类型:负载平衡、自动缩放 而且有 我已通过控制台成功压缩并上传了我的代码: package.json { "name": "cool", "version": "0.0.0", "dependencies": { "ws": "0.4.x" } } serve

使用Elastic Beanstalk web控制台,我启动了一个新的web Server 1.0环境,其中包括:

  • 预定义配置:Node.js,64位Amazon Linux 2014.09 v1.0.9
  • 环境类型:负载平衡、自动缩放
而且有

我已通过控制台成功压缩并上传了我的代码:

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')
  })
})
我还尝试包括
节点\u模块
目录

运行后:

wscat -c ws://default-environment-xxxxxxxxxx.elasticbeatalk.com/
我回来了:

Error: unexpected server response (200)
我怎样才能找到更多关于那个错误的信息

Amazon将端口环境变量设置为8080。所以,我也试着:

wscat -c ws://default-environment-xxxxxxxxxx.elasticbeatalk.com:8080/
但是,它刚刚挂起来,然后又回来了:

Error: connect ETIMEDOUT
另外,当我建立WebSocket连接时,我希望服务器允许它无限期地保持打开状态,这与Heroku的WebSocket实现不同,后者在60秒后超时


是否有关于如何执行此操作的详细教程?

如果您已正确设置了
package.json
文件(主要是在
npm安装时使用
--save
),则不必包含node\u 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',…)
函数并记录所需内容。

好的,经过一段时间或搜索后,我找到了一个解决方案,它可以在不将任何内容更改为ELB和不将代理设置为none的情况下工作(我使用nginx)

您所需要的就是:

  • 在项目的根目录中,创建
    .ebextensions
    目录(如果它不存在)
  • 在那里创建一个文件,我调用了我的
    01\u nginx.config
  • 在此文件中,输入以下代码: 容器命令:

    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
    
将您的代码部署到elastic beanstalk并享受WebSocket连接


PS:您实际上不需要
proxy\u read\u timeout
属性集,我只是自己使用它。而且,它似乎没什么作用,我会继续寻找。

我就是这么想的。我只是手动编辑了我的
包.son的
依赖项
字段,因为我不知道
--save
。所以,谢谢你的提示!:-)如何检查process.env.PORT
是什么?我能想到的唯一方法是部署一个简单的HTTP服务器,它用
process.env.PORT
响应。然后,我在Safari中找到了我的应用程序的URL(没有指定端口),并返回了8080,我不明白这一点,因为我告诉服务器监听
process.env.port
(8080),而不是80(Safari使用的默认端口)。那么,为什么Safari能够通过端口80访问我的简单HTTP服务器呢?当我尝试使用Safari指定端口8080访问它时,请求只是挂起。我应该在我的代码(server.js的第一行)中为
端口
指定什么?您是否在EB环境中使用nginx或Apache作为代理?这将侦听端口80,然后将请求传递到已配置的任何端口上的node.js。我注意到您提到您正在使用负载平衡-这也会影响端口转换要找到报告的端口,您可以尝试在代码中执行
console.log(process.env.port)
,然后通过ssh连接到服务器并运行
tail-f var/log/nodejs/nodejs.log
(这会监视node.js的日志输出)。然后点击服务器,查看ssh连接的日志输出中显示的端口。我已将“代理服务器”设置为“无”。是的,我正在使用负载平衡。也许我会尝试不用它。在这里检查我的答案:我在这里有同样的问题,我被难住了。当我尝试连接websocket时,Chrome返回给我的只是一个“错误”,响应代码为200(?),数据显示“(操作码-1)”。找不到其他东西了。任何帮助都将不胜感激。