GVKun编程网logo

将 websocket 连接到 AWS Elastic Beanstalk(aws websocket api)

14

以上就是给各位分享将websocket连接到AWSElasticBeanstalk,其中也会对awswebsocketapi进行解释,同时本文还将给你拓展amazon-web-services–Mul

以上就是给各位分享将 websocket 连接到 AWS Elastic Beanstalk,其中也会对aws websocket api进行解释,同时本文还将给你拓展amazon-web-services – Multi Docker Elastic Beanstalk:上传.ebextensions、amazon-web-services – 为什么要为Docker使用AWS ECS与ElasticBeanstalk?、amazon-web-services – 从私有Docker存储库将映像部署到AWS Elastic Beanstalk、amazon-web-services – 使用Dockerrun.aws.json通过CLI部署命令部署到elasticbeanstalk等相关知识,如果能碰巧解决你现在面临的问题,别忘了关注本站,现在开始吧!

本文目录一览:

将 websocket 连接到 AWS Elastic Beanstalk(aws websocket api)

将 websocket 连接到 AWS Elastic Beanstalk(aws websocket api)

如何解决将 websocket 连接到 AWS Elastic Beanstalk?

我在将端口 7777 上的 websocket 连接到我的 aws 部署时遇到问题。我是套接字和部署的新手。我的主端口 8081 已连接,但 websocket 有问题。我已经在这里呆了一天,希望得到一些指点!谢谢!

目前,收到此错误:

enter image description here

反应代码

import React from ''react'';
import openSocket from ''socket.io-client'';
let socket = openSocket(''http://my-api.us-east-2.elasticbeanstalk.com:7777'',{ transports: [''websocket''] });
export class HomePage extends React.Component {
  state = {
    channels: null,channelSelected: false,socket: null,typers: {},channel: 1,messages: [],msg: ''''
  }
  socket;
  componentDidMount() {
   
  }

  componentDidUpdate() {
    if (this.props.username && !this.state.channelSelected) {
      this.configureSocket();
      this.setState({ channel: 1,channelSelected: true });
      this.socket.emit(''joinChannel'',{ channel: 1,username: this.props.username });
    }
  }
  configureSocket = () => {
    socket.on(''connection'',() => {
      if (this.state.channel) {
        this.handleChannelSelect(this.state.channel.id);
      }
    });
    socket.on(''incomingChat'',username => {
      let typers = this.state.typers;
      if (!typers[username]) {
        typers[username] = 1;
        this.setState({ typers })
      }
    });

    socket.on(''clearingChat'',username => {
      let typers = this.state.typers;
      delete typers[username]
      this.setState({ typers });
    });

    socket.on(''incomingMessage'',details => {
      let messages = this.state.messages;
      let typers = this.state.typers;
      delete typers[details.username]
      messages.push(details);
      this.setState({ messages,typers });
    })
    socket.on(''channel'',channel => {
      let channels = this.state.channels;
      channels.forEach(c => {
        if (c.id === channel.id) {
          c.participants = channel.participants;
        }
      });
      this.setState({ channels });
    });
    socket.on(''message'',message => {

      let channels = this.state.channels
      channels.forEach(c => {
        if (c.id === message.channel_id) {
          if (!c.messages) {
            c.messages = [message];
          } else {
            c.messages.push(message);
          }
        }
      });
      this.setState({ channels });
    });
    this.socket = socket;
  }

  
  handleChannelSelect = e => {
    e.preventDefault();
    this.setState({ channel: 1 });
    this.socket.emit(''leaveChannel'',this.props.username);
  }

  handleSendMessage = e => {
    e.preventDefault();
    this.socket.emit(''send-message'',{ msg: this.state.msg,username: this.props.username,channel: this.state.channel });
    this.setState({ msg: '''' });
  }

  handleChange = e => {
    const { value } = e.target;
    this.setState({ msg: value });
    if (!value) this.socket.emit(''addingMessage'',{ username: this.props.username,msg: ''cleared'' });
    if(value) this.socket.emit(''addingMessage'',msg: value });
  }

  render() {

    return (
      <div className=''chat-app''>
        <form onSubmit={this.handleSendMessage}>
          <input type="text" onChange={this.handleChange} value={this.state.msg} />
        </form>
        <button onClick={this.handleChannelSelect}></button>
        { this.state.messages.length > 0 && this.state.messages.map(({ username,msg }) => <p key={Math.random()}>{`${username}: ${msg}`}</p>) }

        {Object.keys(this.state.typers).length > 0 && Object.keys(this.state.typers).map(el => el !== this.props.username  && <p>{`${el} typing....`}</p>)}
      </div>
    );
  }
}

服务器代码

const app = require("./app");
const socketio = require(''socket.io'');
const express = require(''express'');
const http = require(''http'');
const db = require("./db");
const AWS = require("aws-sdk");
const CryptoJS = require("crypto-js");
const em = express();
const server = http.createServer(em);
const chatPort = process.env.LIVE_CHAT_PORT || 7777;
const io = socketio(server);
server.listen(chatPort,() => {
  console.log(`Live Chat sock running on port ${chatPort}`)
});
app.listen(process.env.PORT || 8081,() => {
  console.log("Listening on PORT 8081");
});

io.on(''connection'',socket => {
  let user;
  socket.on(''joinChannel'',async ({ username,channel }) => {
    user = userJoin(socket.id,username,channel);
    socket.on(''addingMessage'',details => {
      const { username,msg } = details;
      if (msg === ''cleared'') {
        io.to(user.room).emit(''clearingChat'',username);
      } else {
        io.to(user.room).emit(''incomingChat'',username);
      }
    })
    socket.join(user.room);
  });
  socket.on(''send-message'',async details => {
    const { msg,channel } = details;
    let em = await db.query(`
      INSERT INTO messages(conversation_id,user_id,shared_post,message,posted)
      VALUES($1,$2,null,$3,current_timestamp)
      RETURNING id;
    `,[channel,msg])
    io.to(user.room).emit(''incomingMessage'',details)
  })
  
  socket.on(''leaveChannel'',username => {
    const user = userLeave(username);
    socket.disconnect();

  });
  });

解决方法

暂无找到可以解决该程序问题的有效方法,小编努力寻找整理中!

如果你已经找到好的解决方法,欢迎将解决方案带上本链接一起发送给小编。

小编邮箱:dio#foxmail.com (将#修改为@)

amazon-web-services – Multi Docker Elastic Beanstalk:上传.ebextensions

amazon-web-services – Multi Docker Elastic Beanstalk:上传.ebextensions

是否可以将.ebextensions部署到Multi-Docker Elastic Beanstalk?

我使用Dockerrun.aws.json文件上传我的应用程序,一切正常.我想设置日志以流式传输到Cloudwatch.我应该使用.ebextensions做到这一点.但是,如果我只在网络浏览器(AWS控制台)上传Dockerrun.aws.json(不是.zip或.war),我不知道如何附加.ebextensions.

>我如何将.ebxetensions部署到Multi Docker Elastic Beanstalk?
> …或者是否可以设置哪些日志应该流式传输到Cloudwatch日志?

最佳答案
您应该创建一个zip存档,其中包含Dockerrun.aws.json和.ebextensions目录以及您需要的任何配置文件.

Elastic Beanstalk将从存档中找到Dockerrun.aws.json文件.

这在AWS’Multicontainer Docker tutorial中有所涉及.

amazon-web-services – 为什么要为Docker使用AWS ECS与ElasticBeanstalk?

amazon-web-services – 为什么要为Docker使用AWS ECS与ElasticBeanstalk?

我打算使用Docker,并将1个EC2实例与1个Microservice相关联.

为什么我要在AWS ECS和ElasticBeanstalk中部署Docker?

据说AWS ECS对Docker有本机支持.是吗?

如果你能详细说明在AWS ECS和ElasticBeanstalk上运行docker的优缺点,那就太棒了.

最佳答案
Elastic Beanstalk(多容器)是ECS(弹性容器服务)之上的抽象层,具有一些引导功能和一些限制:

>自动与ECS和ELB交互
>群集运行状况和指标随时可用,无需任何额外工作即可显示
>负载均衡器必须终止HTTPS,所有后端连接都是HTTP
>可轻松调整自动调节和实例大小
>容器日志全部收集在一个地方,但仍按实例分段 – 因此在集群环境中查找哪个实例服务于记录某些重要数据的请求是一项挑战.
>只能在容器定义中设置硬内存限制
>所有集群实例必须运行相同的容器集

从ECS开始,IT是亚马逊对容器编排的回答.它的边缘有点粗糙,绝对是Elastic Beanstalk的一个飞跃,但它确实具有更大的灵活性,包括甚至可以定义自定义调度程序.

Elastic Beanstalk强加的所有限制都被取消了.

请参阅以下更多信息:

Elastic Beanstalk vs. ECS vs. Kubernetes

Amazon EC2 Container Serivce

Amazon Elasticbeanstalk

amazon-web-services – 从私有Docker存储库将映像部署到AWS Elastic Beanstalk

amazon-web-services – 从私有Docker存储库将映像部署到AWS Elastic Beanstalk

我正在尝试从其私有仓库中提取Docker镜像,并在Zip包装的Dockerrun.aws.json的帮助下将其部署在AWS Elastic Beanstalk上.它的内容是

{
    "AWSEBDockerrunVersion": "1","Authentication": {
        "Bucket": "my-bucket","Key": "docker/.dockercfg"
    },"Image": {
        "Name": "namespace/repo:tag","Update": "true"
    },"Ports": [
        {
            "ContainerPort": "8080"
        }
    ]
}

其中“my-bucket”是我在s3上的桶名,它使用与我的BS环境相同的位置.在密钥中设置的配置是结果

$docker login

在docker2boot应用程序的终端中调用.然后将其复制到“my-bucket”中的文件夹“docker”.图像确实存在.
之后我将带有dockerrun文件的.zip上传到EB,然后部署我得到

Activity execution Failed,because: WARNING: Invalid auth configuration file

我错过了什么?
提前致谢

最佳答案
Docker已将配置文件路径从〜/ .dockercfg更新为〜/ .docker / config.json.他们还利用这个机会对配置文件格式进行了重大更改.

但是,AWS仍然需要前一种格式,即〜/ .dockercfg(see the file name in their documentation)中使用的格式:

{
  "https://index.docker.io/v1/": {
    "auth": "__auth__","email": "__email__"
  }
}

这与〜/ .docker / config.json中使用的新格式不兼容:

{
    "auths": {
        "https://index.docker.io/v1/": {
            "auth": "__auth__","email": "__email__"
        }
    }
}

它们非常相似.因此,如果您的Docker版本生成新格式,只需删除auths行及其相应的大括号,您就可以了.

amazon-web-services – 使用Dockerrun.aws.json通过CLI部署命令部署到elasticbeanstalk

amazon-web-services – 使用Dockerrun.aws.json通过CLI部署命令部署到elasticbeanstalk

我正在运行一个具有多个环境的elasticbeanstalk应用程序.此特定应用程序托管托管网络服务的docker容器.

要将新版本的应用程序上传并部署到其中一个环境,我可以浏览Web客户端并单击“Upload and Deploy”,然后从文件选项中选择我最新的Dockerrun.aws.json文件,该文件引用了私有托管的最新版本容器.上传和部署工作正常,没有问题.

为了使我自己和其他人更容易部署,我希望能够使用CLI上传和部署Dockerrun.aws.json文件.如果我在没有任何特殊配置的情况下使用cli eb deploy命令,则会将整个应用程序压缩并将其发送到主机的正常过程发生并失败(它无法推断出它只需要读取Dockerrun.aws.json文件).

我找到了一个关于使用.elasticbeanstalk / config.yml文件控制上传内容的文档.

使用以下语法:

部署:
  artifact:Dockerrun.aws.json

文件已上载并实际成功部署到第一批实例,然后始终无法部署到第二组实例.

失败错误的风格是:’容器意外退出……’

任何人都可以解释或提供使用CLI部署单个docker容器应用程序的规范方法的链接吗?

最佳答案
事实证明我使用config.yml列出的方法是正确的.我看到部分成功部署的原因是因为主机上先前运行的docker容器没有被EB停止.

我认为发生的事情是EB正在发送类似的东西

sudo docker kill –signal = SIGTERM $CONTAINER_ID而不是更常见的sudo docker stop $CONTAINER_ID

我运行的特定容器没有响应SIGTERM,所以它只会坐在那里.当我用SIGKILL在本地测试它时(显然)会正常停止,但SIGTERM本身并不能阻止它.

问题不在于部署方法,而在于EB产生的输出混乱和我的误解.

关于将 websocket 连接到 AWS Elastic Beanstalkaws websocket api的问题就给大家分享到这里,感谢你花时间阅读本站内容,更多关于amazon-web-services – Multi Docker Elastic Beanstalk:上传.ebextensions、amazon-web-services – 为什么要为Docker使用AWS ECS与ElasticBeanstalk?、amazon-web-services – 从私有Docker存储库将映像部署到AWS Elastic Beanstalk、amazon-web-services – 使用Dockerrun.aws.json通过CLI部署命令部署到elasticbeanstalk等相关知识的信息别忘了在本站进行查找喔。

本文标签: