2015-11-25 23 views
40

Có thể xây dựng một hàm trong AWS Lambda để tạo một websocket và gửi dữ liệu đến các ứng dụng đã đăng ký không?Có thể sử dụng Socket.io với AWS Lambda không?

Something như thế này:

John có ứng dụng SuperPhotoApp mở cửa vào điện thoại của mình nhưng quyết định sử dụng các trình duyệt máy tính để bàn để tải ảnh lên dịch vụ SuperPhotoApp (một Bucket S3), sự kiện này thực hiện một chức năng Lambda tạo một máy chủ socket.io và đẩy cập nhật cho tất cả người đăng ký, điện thoại của anh ấy đã mở ứng dụng để ứng dụng tự động cập nhật với ảnh mới.

Đây là điều có thể thực hiện với thông báo đẩy hoặc Amazon SNS, nhưng nếu tôi cần hành vi thời gian thực chẳng hạn như trò chơi trực tuyến, nơi tôi cần cập nhật vị trí của một nhân vật.

Nếu điều này là không thể với Lambda, có giải pháp nào để tôi có thể cập nhật ứng dụng đã mở bằng trình duyệt trên máy tính để bàn không?

Amazon EC2 là lựa chọn duy nhất? Tôi đã đọc rằng nó có vấn đề với mở rộng quy mô, đó là lý do tại sao tôi nhận xét về Lambda.

Trả lời

23

Tôi không nghĩ rằng Lambda sẽ làm việc cho trường hợp bạn mô tả. Liên kết đến diễn đàn AWS dưới đây chỉ ra rằng hàm Lambda chỉ có thể chạy tối đa 5 phút và hơn nữa kể từ khi bạn bị tính phí cho mỗi 100ms thời gian chạy chức năng, điều này có thể sẽ là chi phí cấm. Có một bình luận từ Amazon nói rằng họ đã nghe yêu cầu nhiều lần nên quan tâm đến một số cách để cho phép điều này.

https://forums.aws.amazon.com/thread.jspa?threadID=205761

Đây là một bài đăng từ một người dường như có một thỏa thuận tốt về sự thành công sử dụng EC2 và NodeJS nhưng ông đã phải sử dụng một thay thế cho Socket.io gọi Websockets/ws.

http://www.jayway.com/2015/04/13/600k-concurrent-websocket-connections-on-aws-using-node-js/

Nếu bạn có kế hoạch để chạy máy chủ của bạn đằng sau một cân bằng tải có vẻ như bạn đang đi để có thêm vài hoops để nhảy qua:

https://web.archive.org/web/20160118124227/http://coding-ceo.ghost.io/how-to-run-socket-io-behind-elb-on-aws

+0

Liên kết cuối cùng bị hỏng. Tôi tìm thấy một bài đăng trên blog khác có cùng chủ đề - https://medium.com/@Philmod/load-balancing-websockets-on-ec2-1da94584a5e9 – Suhas

36

Gần đây AWS released support of WebSockets for IoT dịch vụ. Nó rất dễ sử dụng như là hệ thống tin nhắn Pub/Sub cho các ứng dụng web không máy chủ. Bạn có thể đăng tin nhắn mới từ AWS lambda function qua số http post request và nhận chúng dưới dạng tin nhắn trên web trên máy khách.

Tôi đã viết một gói npm nhỏ để xử lý kết nối websocket với máy chủ MQTT từ ứng dụng giao diện người dùng. Hãy xem aws-mqtt-client

13

Không! Lambda là không được thiết kế cho socket.io. Lambda được thiết kế chỉ để xử lý trong thời gian ngắn.

Nếu bạn muốn cung cấp thông báo giá rẻ, bạn có thể thử các dịch vụ bên ngoài như PubNub hoặc Realtime Framework.

Nếu bạn chỉ muốn sử dụng các dịch vụ của Amazon, đừng bận tâm thử SNS vì nó sẽ không phục vụ cho trường hợp sử dụng này (không có điểm cuối cho trình duyệt).

Tuy nhiên, bạn có thể thử AWS IoT.Tôi biết rằng nó có vẻ lạ, nhưng vì nó hỗ trợ các trình duyệt thông qua MQTT, nó là một công cụ tuyệt vời để phát triển thông báo giá rẻ, nhanh chóng và dễ dàng. Theo dõi liên kết this để biết hướng dẫn tuyệt vời. Mã trình diễn có sẵn here.

2

Tôi nghĩ bạn có thể kết hợp AWS Lambda với dịch vụ PUB/SUB khác như PUBNUB https://www.pubnub.com/docs/pubnub-rest-api-documentation.

  1. front-end/app sử dụng AWS Lambda để tự động tạo và quản lý chủ đề
  2. front-end/app nhận được thông tin chủ đề từ AWS Lambda hoặc DB
  3. front-end/app tham gia chủ đề tương ứng và gửi tin nhắn tới PUBNUB trực tiếp
+0

có ai khác sợ nhấp vào liên kết đó không? – Jatin

1

Nếu bạn có tình huống thời gian thực nơi bạn cần thực hiện tính toán hoặc tận dụng phân tích trên luồng thời gian thực, bạn cần suy nghĩ về các sự kiện phát trực tiếp từ trò chơi (phản ánh trạng thái thay đổi trong trò chơi) thành một nền tảng được thiết kế cho sự kiện có tính khả dụng cao, nhanh chóng -streaming, chẳng hạn như triển khai Kafka như AWS Kinesis. Sau đó, bạn có thể tiêu thụ luồng sự kiện từ một công cụ được thiết kế cho các phân tích phát trực tuyến theo thời gian thực, chẳng hạn như Apache Spark hoặc Apache Storm. (AWS có triển khai cho cả hai công nghệ này.)

Sau đó, bạn có thể sử dụng phân tích truyền trực tuyến (và tùy chọn thêm dữ liệu do sự kiện cung cấp) sử dụng AWS Lambda (có thể được kích hoạt bởi sự kiện đi qua đường ống Kinesis của bạn)) để cập nhật tất cả người đăng ký.

Đây là ví dụ về phương pháp tiếp cận dịch vụ vi mô "thực tế" tốt nhất cho vấn đề của bạn và sẽ linh hoạt hơn, tiết kiệm chi phí, dễ duy trì và có thể mở rộng hơn so với quản lý các trường hợp EC2 và nhu cầu của riêng bạn phải lo lắng về tất cả các cơn đau đầu bổ sung với cân bằng tải và tính khả dụng và nhân rộng và trạng thái máy chủ và tính không hoạt động và nhân rộng và lãng phí và đường ống triển khai và theo dõi cá thể, v.v.

Cá nhân tôi thích cách tiếp cận rẻ hơn, dễ bảo trì hơn, hoạt động tốt hơn, cho phép tôi ngủ vào ban đêm và cho phép tôi nhận được không bị gián đoạn giấc ngủ không có ác mộng.

0

Nếu bạn đang tìm kiếm chức năng thời gian thực, tôi sẽ chuyển sang Firebase Cơ sở dữ liệu thời gian thực hoặc Firestore. Tôi sử dụng cả hai khá nặng nề và tôi phải nói họ thật tuyệt vời. Hãy xem tại đây https://firebase.google.com

Các vấn đề liên quan