Websocket Lambda Python и Angular

#python #angular #websocket #aws-lambda

#python #angular #websocket #aws-lambda

Вопрос:

Ребята, я хочу создать websocket api для обновления моих записей в таблице в реальном времени.

Я использую python lambda и angular для своего проекта.

допустим, у меня есть эта таблица записей книги :

 Id |  Book name | Desc
1  |    bn1     | dec1
2  |    bn2     | dec2
3  |    bn3     | dec3
  

и я хочу создать websocket для обновления моей таблицы в режиме реального времени в angular, если есть изменения.

итак, я не знаком с websocket как с интерфейсом, так и с серверной частью. пожалуйста, дайте мне какой-нибудь учебник, связанный с этим, СПАСИБО

Ответ №1:

Я полагаю, у вас уже есть и запущен сервер websocket.
Что вам нужно сделать в angular:
сначала вам нужно установить socket.io-client

 npm install socket.io-client
  

Затем вам нужно создать службу, вы можете вызвать ее web-socket.service.ts , вам нужно будет импортировать socket.io-client и Observable

 import { Injectable } from '@angular/core';
import { Observable } from 'rxjs';
import * as io from 'socket.io-client';

@Injectable({
  providedIn: 'root',
})
export class WebSocketService {
  // your service's logic
}
  

Теперь внутри вашего сервиса вы должны объявить переменную для хранения вашего соединения с сокетом

 socket: any
  

Создайте конструктор и инициализируйте соединение с вашим сокетом

   constructor() {
    this.socket = io('your web socket url')
  }
  

Создайте функцию для прослушивания сервера веб-сокетов

   listen(eventName: string) {
    return new Observable((subscriber) => {
      this.socket.on(eventName, data => {
        subscriber.next(data)
      })
    })
  }
  

и функция для отправки на сервер веб-сокетов, если это необходимо

   emit(eventName, data) {
    this.socket.emit(eventName, data)
  }
  

Наконец, вы просто вводите сервис, в котором вы его используете, например, внутри компонента приложения

 export class AppComponent implements OnInit  {

  constructor(private webSocketService: WebSocketService) {}

  ngOnInit() {
    this.webSocketService.listen('your event name').subscribe(data => console.log(data))
  }
}
  

вы можете найти весь код по ссылке
Я не смог заставить socket-io работать в stackblitz, но я думаю, что код будет полезен для вас.

Комментарии:

1. Большое вам спасибо за это. Моя проблема в том, что сервер websocket запущен и запущен. Знаете ли вы, как это сделать в lambda / бессерверной среде? Я не понимаю, как вернуть туда данные и действительно ли они возвращают запись через определенные промежутки времени

2.Я никогда не использовал python для серверной части, но я использую nodejs, и я могу указать на некоторые ресурсы, если вы хотите начать работу с aws lambda / serverless / nodejs. youtube.com/watch?v=71cd5XerKss serverless.com/framework/docs/providers/aws/events/websocket

3. возвращает ли сервер websocket данные через заданный интервал или он возвращает новые данные только при каждом запуске действия?

4. Веб-сокеты дают вам возможность работать с данными в реальном времени, что означает, что данные на сервере всегда синхронизированы с данными на клиенте. можете ли вы объяснить, что вы подразумеваете под «данными в заданном интервале»?

5. Даже если веб-сокеты помечены как автоматические, но вам придется создавать события на стороне сервера. например, вы создаете событие, которое генерируется каждый раз при изменении ваших данных. на стороне клиента вы прослушаете это событие и соответствующим образом обновите свою таблицу. Я думаю, вам придется провести немало исследований, чтобы полностью понять концепцию веб-сокетов.