Angular 4 + webSocket 双方通信小尝试
前言项目中用到客户端和服务端通讯,下面是用angular 4 实现一个小demo。 正文一、搭建服务器环境使用node.js实现web服务器 npm init -y
此时会生成一个包含默认配置的package.json 文件 npm i @types/node --save
4、编写配置文件,说明如何将ts 文件编译成js文件 {
"compilerOptions": {
"target": "es5","module": "commonjs","emitDecoratorMetadata": true,"experimentalDecorators": true,//编译输出js文件路径
"outDir": "build",// 开发时用es6语法
"lib": [
"es6"
]
},"exclude": [
"node_modules"
]
}
5、使当前tsconfig,json文件生效(vscode IDE环境) 二、创建webSocketServer(服务器端)webSocket 是一种低负载的二进制协议,目前主流的浏览器都支持了webSocket协议,在node.js的生态圈中很多项目都实现了webSocket协议,本次使用的是ws,也就是说用wsl来实现一个webSocket服务器,需要安装ws的依赖库和类型定义文件。 //依赖库
npm install ws --save
//类型定义文件
npm install @types/ws -save
在机器的8085端口上创建一个webSocket 服务器(写在auction_server.ts文件中) import {Server} from 'ws';
const wsServer = new Server({port:8085});
//当有任何一个客户端连接到服务器时,给这个客户端推送一条消息
wsServer.on("connection",websocket => {
websocket.send("这个消息是服务器主动推送的");
});
使用命令,启动服务器(在server文件夹下) node build/auction_server.js
三、创建webSocketService为什么要创建webSocketService呢?大家都知道,前后端使用http协议通信时,http中提供了http服务,而webSocket是没有提供这种服务的,所以咱们需要自己写。 ng g service shared/webSocket
2、写两个方法:接收服务器端的消息 和 发送消息到服务器 import { Injectable } from '@angular/core';
import { Observable } from 'rxjs';''
@Injectable({
providedIn: 'root'
})
export class WebSocketService {
ws: WebSocket;
constructor() { }
// 返回一个可观测的流,包括服务器返回的消息
createObservableSocket(url: string): Observable<any> {
this.ws = new WebSocket(url);
return new Observable(
observer => {
this.ws.onmessage = (event) => observer.next(event.data);
this.ws.onerror = (event) => observer.error(event);
this.ws.onclose = (event) => observer.complete();
// 向服务器端发送消息
sendMessage(message: any) {
this.ws.send(JSON.stringify(message));
}
}
四、创建webSocketClient(客户端)所说的客户端区别于服务器端,客户端包含两块东西:服务和 组件,服务通过订阅服务器的地址接收服务器传来的数据,服务作为消息的被观察者,组件作为消息的观察者,组件将服务注入,当服务受到来着服务器的消息时,传递给组件,组件显示数据。 ng g component webSocket
//注意:在组件中注入服务的时候需要在module的provider中写明
constructor(private wsService:WebSocketService) { } ngOnInit() { // 订阅了服务器发送过来的消息,并把消息打印在控制台上 this.wsService.createObservableSocket("ws://localhost:8085") .subscribe( data => console.log(data),err => console.log(err),() => console.log("流已经结束") ); } //此方法需要在html模板中写明 sendMessageToServer(){ this.wsService.sendMessage("hello from client"); }
五、实现通讯服务器端 效果 总结webSocket 在angular 前端的小demo 到这里就结束了,感谢阅读! (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |