繁体   English   中英

连接 SOCKET.IO

[英]CONNECTION SOCKET.IO

我已经被 socket.io 问题困扰了几天,更准确地说是在服务器到客户端之间。 在客户端,(Angular)我可以发出一个事件,服务器可以抓取并执行所有逻辑,但是在服务器到客户端之后它没有显示生命迹象。 我已经表达了所有事件,我已经按照文档中的说明重新制定了所有设置,但没有任何效果,谁能看到我哪里出错了?

“socket.io”:“^4.5.1”

"socket.io-client": "^4.5.1",

ANGULAR(客户端)

import { Injectable } from '@angular/core';
import { Observable } from 'rxjs';
import { io, Socket } from 'socket.io-client';
import { environment } from 'src/environments/environment';


@Injectable({
  providedIn: 'root'
})
export class SocketIoService {

  socket: Socket;

  constructor() {}

  connect(token: string, userName: string){
    this.socket = io(environment.path.hermsUrl, {
      query: {
       token,
       userName
      }
    });
  }

  disconnect(){
    this.socket.disconnect();
  }

  sendMessage(msg: any) {
    this.socket.emit('send-message', (msg));
  }

  getConversation(){
    this.socket.on('update-conversation', (conversation)=> {
      console.log('############################################');
    });
  }


}

NODE.JS(服务器端)

require('dotenv').config();
require('./Helpers/init_mongodb');
const express = require('express');
const cors = require('cors');
const createError = require('http-errors');
const chatController = require('./Controllers/chat.controller');
const Chat = require('./Models/chat.model');
const app = express();
const httServer = require('http').createServer(app);
const { verifyAccessToken } = require('./Helpers/jwt_token');
const userRoute = require('./Routes/user.routes');
const eventRoute = require('./Routes/event.routes');
const chatRoute = require('./Routes/chat.routes');
const decode = require('jwt-decode');
const PORT = process.env.PORT || 5005;

const io = require('socket.io')(httServer, {
  cors: {
    origins: ["*"]
  }
});

app.use(express.json({ limit: '50mb' }));
app.use(express.urlencoded({ extended: true }));
app.use(cors());
app.use('/path/user', userRoute);
app.use('/path/event', eventRoute);
app.use('/path/chat', chatRoute);

app.use(async (req, res, next) => {
  next(createError.NotFound('THIS ROUTE DOES NOT EXIST'))
});

app.get('/', verifyAccessToken, async (req, res, next) => {
  res.send('HELLO THERE')
});


app.use((err, req, res, next) => {
    res.status(err.status || 500)
    res.send({
      error: {
        status: err.status || 500,
        message: err.message,
      },
    })
});


io.on("connection", (socket) => {
  
  const decodedObj = decode(socket.handshake.query.token);
  socket.id = decodedObj.aud;
  const userName = socket.handshake.query.userName;

  console.log("========= SOCKET.IO CONNECTED =========");
  console.log("");
  console.log("USERNAME: " + userName);
  console.log("ID: " + socket.id);
  console.log("");
  console.log("=======================================");


  socket.on('send-message', async (message) => {

    try{

        const chatId = message.chatId;
        const decodedObj = decode(message.sender);
        const senderId = decodedObj.ID;
        const userSocketId = message.userId;

        const date = new Date();
        const day = date.getDate();
        const month = date.getMonth();
        const year = date.getFullYear();
        const hour = date.getHours();
        const minuts = date.getMinutes();

        const sendingDate = day + "/" + month + "/" + year + " " + hour + ":" + minuts;

        const newMsg = {
          msgType: message.typeOfMsg,
          message: message.msg,
          date: sendingDate,
          sender: senderId
        }

        const conversation = await Chat.findById(chatId);

        if(!conversation){
          throw createError.NotFound();
        }

        conversation.messages.push(newMsg);

        const updateConversation = await Chat.findByIdAndUpdate(chatId, conversation);

        if(!updateConversation){
          throw createError.InternalServerError();
        }

        console.log("!!!!!!!!!!! SEND EMIT FROM SOCKET/SERVER !!!!!!!!!!!!!!!");
        io.emit('update-conversation', 'FROM SERVER');
        io.emit('update-conversation');
        io.local.emit('update-conversation');
        io.local.emit('update-conversation', 'FROM SERVER');
        socket.emit('update-conversation', 'FROM SERVER');
        socket.emit('update-conversation');
        socket.broadcast('update-conversation', 'FROM SERVER');
        console.log("!!!!!!!!!!! EMIT SENDED !!!!!!!!!!!!!!!");

        
      } catch (error) {
        console.log(error);
      }
  });



  socket.on("disconnect", () => {
    console.log("########### SOCKET.IO DISCONNECTED ###########");
    console.log("");
    console.log("USERNAME: " + userName);
    console.log("ID: " + socket.id);
    console.log("");
    console.log("##############################################");
  });

});


httServer.listen(PORT, () => {
    console.log(`SERVER RUNNING ON PORT ${PORT}`);
})

您似乎尚未在客户端中收听update-conversation消息。 因此,当服务器发送它时,您没有任何客户端代码来实际接收它。

首次创建 socket.io 连接时,您需要在客户端注册监听this.socket.on('update-conversation', ...) 然后,只要服务器发送该消息,它将准备好接收该消息。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM