javascript - 我如何通过 Angular 向套接字服务器发送数据和获取数据

标签 javascript angular sockets socket.io

目前我正在尝试通过 Angular 客户端发送和获取数据到套接字服务器以及从套接字服务器到 Angular 我需要获取数据我能够推送数据但我需要知道如何将数据推送到api在套接字服务器中是否存在并从 api 获取数据到套接字服务器并将其发送给客户端

下面是我的

用于从 Angular 客户端向套接字服务器发送数据

  • 组件代码

    构造函数(公共(public)套接字服务:SocketioService){

       }
    
      ngOnInit(){
         this.socketService.setupSocketConnection();
       }
     // For sending post request
       sendMsg(){
         this.socketService.sendData(this.title);
       }
        // For getting the request
       getMsg(){
    
        this.socketService.getMsg().subscribe(res => {
          console.log(res);
        })
    

Angular 服务代码

import * as io from 'socket.io-client';

import { Observable } from 'rxjs';

socket;
  constructor() {

  }
  setupSocketConnection() {
    this.socket = io(environment.SOCKET_ENDPOINT);


  }
  // for posting data
  sendData(values){
    console.log(values);
    this.socket.emit('my message', values);
  }
   //for getting data
  getMsg(){
   return Observable.create((observer) => {
    this.socket.on('grabMsg', (message) => {
        observer.next(message);
    });
});
  }

节点服务器代码

const app = require('express')();
const http = require('http').createServer(app);
const io = require('socket.io')(http);
app.get('/', (req, res) => {
  res.send('<h1>Hey Socket.io</h1>');
});
io.on('connection', (socket) => {
  console.log('a user connected');
  socket.on('disconnect', () => {
    console.log('user disconnected');
  });
  socket.on('my message', (msg) => {
      //here i want to consume api like 
      // localhost:3000(post) {"title":"ss"}

    console.log('message: ' + msg);
  });
  socket.on('grabMsg', () => {
        //here i want to consume api like 
      // localhost:3000(get)
      let ms = 'max'
      io.emit(ms);
  });
});
http.listen(3001, () => {
  console.log('listening on *:3001');
});

所以在这里我如何在套接字服务器中发送和发布数据 简而言之,我会将数据从 Angular 客户端发送到套接字服务器,然后再发送到某个 api

最佳答案

//server-side
socket.on('grabMsg', () => {
  let ms = 'max'
  io.emit(ms);
});

//client-side
this.socket.on('grabMsg', (message) => {
    observer.next(message);
});

在上面的代码中,你在客户端和服务器端都使用了 socket.on,根据你的要求使用一个作为 emit as 一个作为 on。

在下面的代码中,你只发射并且有第一个参数用于发射(任何文本包含在旁引号中),如下面的代码

socket.on('grabMsg', () => {
  let ms = 'max'
  io.emit("thatText",ms);
});

相同的文本(thatText)也应该在客户端,比如

this.socket.on('thatText', (message) => {
   console.log(message)
});

关于javascript - 我如何通过 Angular 向套接字服务器发送数据和获取数据,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/62914530/

相关文章:

angular - Observable.combineLatest 即使失败也会继续

angular - 无法在递归 Angular 形式上使用 ngIf 找到带路径的控件

javascript - 如何获得带有 highcharts 的响应式图表?

javascript - 语法错误: Unexpected token u

javascript - AngularJS 如何在另一个 ngController 中访问一个 ngController 的参数

javascript - 如何在更改事件完成之前更新 DOM?

javascript - 3D CSS 场景无法在 Safari 中正确显示

sockets - Rust 持久化 TcpStream

java - Android 蓝牙连接 - 服务发现失败

java - InputStream 的 available() 趋于停止