AWS Lambda에서 Socket.io를 사용할 수 있습니까?
웹 소켓을 생성하고 구독 애플리케이션에 데이터를 보내는 함수를 AWS Lambda에서 빌드 할 수 있습니까?
이 같은:
John은 자신의 휴대폰에서 SuperPhotoApp 앱을 열었지만 데스크톱 브라우저를 사용하여 SuperPhotoApp 서비스 (S3 버킷)에 사진을 업로드하기로 결정했습니다.이 이벤트는 socket.io 서버를 생성하고 모든 구독자에게 업데이트를 푸시하는 Lambda 함수를 실행합니다. , 그의 휴대 전화에 앱이 열렸으므로 앱이 새 사진으로 자동 업데이트됩니다.
이것은 푸시 알림이나 Amazon SNS로 할 수있는 일이지만, 예를 들어 캐릭터의 위치를 업데이트해야하는 온라인 게임과 같은 실시간 동작이 필요한 경우에는 어떻게해야합니까?
Lambda에서 이것이 가능하지 않은 경우 데스크톱 브라우저를 사용하여 열린 앱을 업데이트 할 수있는 솔루션이 있습니까?
Amazon EC2가 유일한 옵션입니까? 확장에 문제가 있다는 것을 읽었습니다. 그래서 Lambda에 대해 언급하고 있습니다.
여기서 설명한 경우에는 Lambda가 작동하지 않을 것이라고 생각합니다. 아래의 AWS 포럼에 대한 링크는 Lambda 함수가 최대 15 분 동안 만 실행될 수 있으며 100ms의 함수 런타임 당 요금이 부과되므로 비용이 많이들 수 있음을 지적합니다. Amazon에서 요청을 여러 번 들었으므로이를 허용하는 방법에 관심이 있다는 의견이 있습니다.
https://forums.aws.amazon.com/thread.jspa?threadID=205761
다음은 EC2 및 NodeJS를 사용하여 많은 성공을 거둔 것으로 보이지만 Websockets / ws라는 Socket.io의 대안을 사용해야하는 사람의 게시물입니다.
http://www.jayway.com/2015/04/13/600k-concurrent-websocket-connections-on-aws-using-node-js/
로드 밸런서 뒤에서 서버를 실행할 계획이라면 다음과 같은 몇 가지 작업을 더 진행해야 할 것 같습니다.
최근 AWS는 IoT 서비스 용 WebSockets 지원을 출시했습니다 . 서버리스 웹 애플리케이션을위한 Pub / Sub 메시지 시스템으로 사용하기가 매우 쉽습니다. 을 AWS lambda function
통해 새 메시지를 게시 http post request
하고 클라이언트에서 웹 소켓 메시지로받을 수 있습니다.
프런트 엔드 앱에서 MQTT 서버에 대한 웹 소켓 연결을 처리하는 작은 npm 패키지를 작성했습니다. 체크 아웃 AWS-MQTT 클라이언트를
아니! Lambda는 socket.io 용으로 설계 되지 않았습니다. Lambda는 단시간 처리 전용으로 설계되었습니다.
저렴한 알림을 제공하려는 경우 PubNub 또는 Realtime Framework 와 같은 외부 서비스를 사용해 볼 수 있습니다 .
Amazon 서비스 만 계속 사용 하려면이 사용 사례에 사용할 수 없기 때문에 SNS를 시도하지 마십시오 (브라우저 용 엔드 포인트가 없음).
그러나 AWS IoT를 사용해 볼 수 있습니다 . 이상하게 들리지만 MQTT를 통해 브라우저를 지원하기 때문에 저렴하고 빠르고 쉽게 알림을 개발할 수있는 훌륭한 도구입니다. 훌륭한 튜토리얼을 보려면 이 링크를 따르십시오 . 데모 코드는 여기에서 확인할 수 있습니다 .
업데이트 (AWS re : invent 2018 이후) : 이제 API Gateway가 웹 소켓을 지원합니다! 여기에서 Lambda와 함께 API Gateway 웹 소켓을 사용하는 예제를 참조하십시오.
- https://serverless.com/blog/api-gateway-websockets-support/
- https://aws.amazon.com/blogs/compute/announcing-websocket-apis-in-amazon-api-gateway/
API Gateway의이 기능에 대한 설명서는 https://docs.aws.amazon.com/apigateway/latest/developerguide/apigateway-websocket-api.html을 참조 하십시오.
API Gateway와 함께 socket.io를 사용하는 Node.js 프레임 워크의 흥미로운 예도 있지만, 이것이 특별히 귀하의 사용 사례에 적합한 지 조사하지 않았습니다 : https://github.com/tiaod/moleculer-io
Amazon IoT Core 사용을 고려해야합니다. 설명하겠습니다.
실시간 스트림에서 계산을 수행하거나 분석을 활용해야하는 실시간 상황이있는 경우 빠른 속도를 위해 설계된 플랫폼으로의 스트리밍 이벤트 (실시간으로 상태 변화를 반영 함)에 대해 생각해야합니다. , AWS Kinesis와 같은 Kafka 구현과 같은 고 가용성 이벤트 스트리밍. 그런 다음 Kinesis Analytics, Apache Spark 또는 Apache Storm과 같은 실시간 스트리밍 분석 용으로 설계된 도구에서 이벤트 스트림을 사용할 수 있습니다.
그런 다음 AWS Lambda (Kinesis 파이프 라인을 통해 발생하는 이벤트에 의해 트리거 될 수 있음)를 사용하여 스트리밍 분석 (및 선택적으로 추가 이벤트 제공 데이터)을 사용하여 모든 구독자에게 업데이트를 푸시 할 수 있습니다. 특히 각 사용자에 대한 "주제"를 생성하는 경우 Amazon IoT Core 서비스를 통해 연결된 경우 이러한 구독자에게 실시간으로 업데이트를 푸시 할 수 있습니다. 이 서비스는 보유 할 수있는 주제 수에 대한 상한선이 없도록 설계되었으므로 탄력적으로 확장해야합니다.
이것은 문제에 대한 모범 사례 "빅 데이터"서버리스 (VM 유지 관리를 피하고 서버리스 / 관리 형 서비스 만 사용하는 한) 접근 방식의 예이며 훨씬 더 탄력적이고 비용 효율적이며 사용하기 쉽습니다. 자체 EC2 인스턴스를 관리하는 것보다 유지 및 확장 가능하며로드 밸런싱 및 가용성과 복제, 서버 상태 및 멱 등성, 확장 및 낭비 된 리소스, 배포 파이프 라인 및 인스턴스 모니터링 등으로 인한 모든 추가 골칫거리에 대해 걱정할 필요가 있습니다. 기타..
Amazon IoT Core 서비스를 사용하는 경우 MQTT (매우 빠르고 가벼운)를 통해 웹 소켓을 사용하여 클라이언트 브라우저에 직접 이벤트를 푸시 할 수도 있고이를 AWS Lambda와 직접 통합 할 수도 있습니다. 여기에 IoT Core를 사용하는 멋진 데모 앱이 있습니다. https://github.com/aws-samples/aws-iot-chat-example
개인적으로 저는 비용이 적게 들고 유지 관리가 더 쉽고 성능이 더 좋으며 밤에 잠을 잘 수 있고 악몽이없는 중단없는 수면을 취할 수있는 접근 방식을 선호합니다 .
AWS Lambda를 PUBNUB https://www.pubnub.com/docs/pubnub-rest-api-documentation 과 같은 다른 PUB / SUB 서비스와 결합 할 수 있다고 생각합니다 .
- 프런트 엔드 / 앱은 AWS Lambda를 사용하여 주제를 동적으로 생성 및 관리합니다.
- 프런트 엔드 / 앱은 AWS Lambda 또는 DB에서 주제 정보를 가져옵니다.
- 프론트 엔드 / 앱은 해당 주제에 참여하고 PUBNUB에 직접 메시지를 보냅니다.
실시간 기능을 찾고 있다면 Firebase Real Time Database 또는 Firestore로 전환하겠습니다. 나는 둘 다 꽤 많이 사용하고 그들이 훌륭하다고 말해야합니다. 여기에서 확인하십시오 https://firebase.google.com
예, AWS Lambda를 사용하여 socket.io 서버에 socket.io 클라이언트로 이벤트를 게시 할 수 있습니다.
구현 단계 :
- 로컬에서 노드 앱을 만들고 프로젝트 폴더에서 npm install socket.io-client --save를 실행합니다.
index.js에서 핸들러 코드를 구현합니다. 다음은 그 예입니다.
exports.handler = 비동기 (이벤트) => {
var io = require('socket.io-client'); var socket = io.connect("http://example.com:9999"); let payload = { "id": "1" }; socket.emit("MyEvent", payload); return 'Sent message!';
};
폴더의 zip 파일을 만듭니다.
- AWS Lambda에서 .Zip 파일 업로드를 선택합니다.
- 파일이 업로드 된 후 파일 구조가 다음과 유사한 지 확인하십시오.
Project
-node_modules
-index.json
-package-lock.json
-package.json
Save and test.
You can't use Lambda to host a socketio server. But you can use lambda to emit events into an external socketio server
ReferenceURL : https://stackoverflow.com/questions/33926619/is-it-possible-to-use-socket-io-with-aws-lambda
'Program Tip' 카테고리의 다른 글
C에서 "적어도"int 크기를 어떻게 요청합니까? (0) | 2020.12.15 |
---|---|
Python / psycopg2 WHERE IN 문 (0) | 2020.12.15 |
Webpack을 사용하여 프로젝트에서 여러 파일 항목 및 출력을 설정하는 방법은 무엇입니까? (0) | 2020.12.14 |
mp3 파일을 병합하는 가장 좋은 방법은 무엇입니까? (0) | 2020.12.14 |
Ruby에서 블록과 블록의 차이점 (0) | 2020.12.14 |