【问题标题】:Using WebSockets in Angular Dart在 Angular Dart 中使用 WebSocket
【发布时间】:2017-10-14 15:06:50
【问题描述】:

我正在尝试在 Dart 中连接一个 websocket:

@Injectable()
class Sock {

    ...

    Future<WebSocket> connect() async {
        return WebSocket.connect("ws://....");
    }


}

我一拨打connect(),就会看到一个似乎无关的错误:

EXCEPTION: 'dart:io-patch/platform_patch.dart': error: line 25: native function 'Platform_GetVersion' (0 arguments) cannot be found
  static String _version() native "Platform_GetVersion";
  ^

STACKTRACE: 
platform_impl.dart 110                              _Platform.version
platform.dart 73                                    Platform._version
platform.dart 73                                    Platform._version
platform.dart 229                                   Platform.version
http_impl.dart 2843                                 _getHttpVersion
http_impl.dart 1672                                 new _HttpClient
http.dart 1338                                      new HttpClient
websocket_impl.dart 968                             _WebSocketImpl._httpClient
websocket_impl.dart 968                             _WebSocketImpl._httpClient
websocket_impl.dart 994                             _WebSocketImpl.connect
websocket.dart 319                                  WebSocket.connect
package:atomcomponents/util/sock.dart 44:20         Sock.connect
package:atomcomponents/util/sock.dart 35:21         new Sock.<fn>
dart:async                                          _ZoneDelegate.runUnary
package:angular2/src/core/zone/ng_zone.dart 184:21  NgZone._runUnary
dart:async                                          _ZoneDelegate.runUnary
package:angular2/src/core/zone/ng_zone.dart 184:21  NgZone._runUnary



VM276:1 EXCEPTION: NoSuchMethodError: The method 'openUrl' was called on null.
Receiver: null
Tried calling: openUrl("GET", Instance of '_Uri')
STACKTRACE: 
dart:core                                           Object.noSuchMethod
websocket_impl.dart 994                             _WebSocketImpl.connect
websocket.dart 319                                  WebSocket.connect
package:atomcomponents/util/sock.dart 44:20         Sock.connect
package:atomcomponents/util/sock.dart 32:21         new Sock.<fn>
dart:async                                          _ZoneDelegate.runUnary
package:angular2/src/core/zone/ng_zone.dart 184:21  NgZone._runUnary
dart:async                                          _ZoneDelegate.runUnary
package:angular2/src/core/zone/ng_zone.dart 184:21  NgZone._runUnary

有人建议我把 BrowserClient 添加到bootstrap

// bootstrap angular2
bootstrap(AppComponent, [
    ROUTER_PROVIDERS,
    provide(APP_BASE_HREF, useValue: '/'),
    provide(LocationStrategy, useClass: HashLocationStrategy),
    provide(BrowserClient, useFactory: () => new BrowserClient(), deps: [])
]);

但这并没有什么区别,WebSocket.connect 仍然失败,同样巨大的堆栈跟踪。

在旧代码中,new WebSocket("ws://..."); 曾经可以工作,但 WebSocket 现在是一个抽象类,并且该构造函数已被弃用。

  @Deprecated('This constructor will be removed in Dart 2.0. Use `implements`'
      ' instead of `extends` if implementing this abstract class.')
  WebSocket();

文档字面上只提到了它: https://webdev.dartlang.org/angular/guide/server-communication

WebSocket 协议是另一种重要的通信技术; 本页没有介绍。

我在 Angular 3.1.0Dart 1.24.2

WebSockets 可以与 Angular 一起使用吗?如果可以,缺少什么使其工作?

【问题讨论】:

    标签: angular websocket dart angular-dart


    【解决方案1】:

    嗯,似乎我出于某种原因使用了 Sockets 的后端实现,将我从 dart:io 的导入更改为现在可以正常工作了。

    import 'dart:html';
    

    这就是连接:

    new WebSocket("ws://...");
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2019-08-14
      • 2019-03-05
      • 1970-01-01
      • 1970-01-01
      • 2014-04-02
      • 1970-01-01
      • 2018-11-02
      • 1970-01-01
      相关资源
      最近更新 更多