简体   繁体   English

如何以角度实现socket.io

[英]how to implement socket.io in angular

i have socket.io as service which works in angularJS but i trying to reimplement it as service in angular. 我有socket.io作为可在angularJS中工作的服务,但是我试图将其重新实现为angular。中的服务。 any idea on how to: 关于如何的任何想法:

here is the implementation in angularJS: 这是angularJS的实现:

angular.module('App')
.factory('socket', function ($rootScope) {
  var socket = io.connect()
  return {
    on: function (eventName, callback) {
      socket.on(eventName, function () {
        var args = arguments
        $rootScope.$apply(function () {
          callback.apply(socket, args)
        })
      })
    },

    emit: function (eventName, data, callback) {
      socket.emit(eventName, data, function () {
        var args = arguments
        $rootScope.$apply(function () {
          if (callback) {
            callback.apply(socket, args)
          }
        })
      })
    }
  }
})

To create a socket.service.ts file (make sure to add it in providers section of app.module.ts and import the service in the component which uses it): 要创建一个socket.service.ts文件(请确保将其添加到app.module.ts的 provider部分中, 并将 服务导入使用该文件的组件中):

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

const SERVER_URL = 'http://localhost:3000';

@Injectable()
export class SocketService {
  private socket;

  public initializeSocket() {
    this.socket = io(SERVER_URL);
  }
}

To implement your listeners(observables) and emiters: 要实现您的监听器(可观察对象)和发射器:

  public emitSomething(data) {
    this.socket.emit('emittingSomething', data);
  }

  public onGotSomething(): Observable<data> {
    return new Observable<data>((observer) => {
      this.socket.on('receivedSomething', (myData: data) => observer.next(myData));
    });
  }

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM