WebSocket的使用

创建webSocketServer(服务器端)

webSocket 是一种低负载的二进制协议,目前主流的浏览器都支持了webSocket协议,在node.js的生态圈中很多项目都实现了webSocket协议,本次使用的是ws,也就是说用wsl来实现一个webSocket服务器

const Ws = require('ws')
const wsServer = new Ws.Server({port:8085});
// 建立连接
wsServer.on("connection",websocket => {
    websocket.send("这个消息是服务器主动推送的");
      //将客户端发过来的消息直接返回回去
    websocket.on('message', message => {
        websocket.send('返回给客户端'+ message)
        console.log('客户端发来的消息'+ message)
    })
 });
 

在客户端创建webSocketService

  • 创建一个服务,服务中声明一个webSocket

ng g service shared/webSocket

  • 写两个方法:接收服务器端的消息 和 发送消息到服务器
import { Observable } from 'rxjs';

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));
  }
}
  • 在组件中使用
// 引入服务
import { WebSocketService } from '../shared/web-socket.service';
export class WebSocketComponent implements OnInit {
  public messages: Array<string> =[]
   // 注入服务 也叫声明
  constructor(private wsService: WebSocketService) { }

  ngOnInit() {
    // 订阅了服务器发送过来的消息 连接websocket
    this.wsService.createObservableSocket("ws://localhost:8085")
    .subscribe(
      data => this.messages.push(data),
      err => console.log(err),
      () => console.log("流已经结束")
    );
  }

  //此方法需要在html模板中写明
  sendMessageToServer(){
    this.wsService.sendMessage("hello from client");
  }
}

©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容