Angular 4 + webSocket 双方通信小尝试

前言

    项目中用到客户端和服务端通讯,下面是用angular 4 实现一个小demo。

正文

一、搭建服务器环境

    使用node.js实现web服务器
    1、新建server 文件夹
    2、初始化文件夹
    在文件夹下执行命名

npm init -y

    此时会生成一个包含默认配置的package.json 文件
    3、引入node 的类型定义文件,便于在ts中使用js已有的库

npm i @types/node --save

    4、编写配置文件,说明如何将ts 文件编译成js文件
    新建tsconfig.json 文件,文件内容如下

{
     "compilerOptions": {
         "target": "es5",
         "module": "commonjs",
         "emitDecoratorMetadata": true,
         "experimentalDecorators": true,
         //编译输出js文件路径
         "outDir": "build",
        //  开发时用es6语法
         "lib": [
             "es6"
         ]
     },
     "exclude": [
         "node_modules"
     ]
}

    5、使当前tsconfig,json文件生效(vscode IDE环境)
    找到菜单栏中的‘任务’,选择‘Run Build Task’,出现下面对话框
这里写图片描述
    选择刚刚写好的tsconfig.json文件,一两分钟出现下面的情况就OK了。
这里写图片描述

二、创建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是没有提供这种服务的,所以咱们需要自己写。
    注意:服务写在客户端,需要另起一个项目,和上面的服务端不同
    1、创建一个服务,服务中心声明一个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 到这里就结束了,感谢阅读!

  • 0
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 3
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 3
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

奔跑的大白啊

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值