首页 > 解决方案 > 是否有可能仅将 socket.io 用于应用程序的特定部分?

问题描述

我是 socket.io 的新手。只是我想知道是否有可能将套接字用于应用程序的某些部分,其余部分继续使用普通的 http RESTful API?

更具体地说,我已经开发了一个应用程序,其中 ionic 5 用于前端和 nodejs,express 和 mongodb 用于后端。

我已将 socket.io 添加到我的 app.js 文件中,如下所示,并且服务器正在侦听。

const app = express();
const port = process.env.PORT || 5000;
const http = require("http");
const server = http.createServer(app);
const io = require("socket.io")(server);

io.on('connection',(socket)=>{
console.log('a user connected')
socket.on('disconnect', function(){
    io.emit('user-changed', {user:socket.username,event:'left'});
})
socket.on('comment',(comment)=>{
    console.log(comment)
    io.emit('comment',{cmt: comment.text,user:socket.username, createdAt: new Date()})
})})

我的讨论 API 路由文件

const express = require("express");
const router = require("express-promise-router")();
const discussionController = require("../controllers/discussion.controller");
const auth = require("../../helpers/auth");

router.route("/").get(discussionController.getAllDiscussions);
router.route("/discussion/:id").get(discussionController.getDiscussion);
router.route("/comment").post(auth, discussionController.createComment);
router.route("/comments/:id").get(auth, discussionController.getComments);
router.route("/search/:params").get(auth, discussionController.searchDiscussion);
router.route("/create-discussion").post(auth,discussionController.createDiscussion);

module.exports = router;

我的控制器文件

const mongoose = require("mongoose");
const Discussion = require("../../models/discussion.model");
const Comment = require("../../models/comment.model");

module.exports = {
  getAllDiscussions: async (req, res, next) => {},
  getDiscussion: async (req, res, next) => {},
  getComments: async (req, res, next) => {},
  createDiscussion: async (req, res, next) => {},
  createComment: async (req, res, next) => {},
  searchDiscussion: async (req, res, next) => { }
};

同样在我的 app.module n 前面,我添加了 SocketIoModule 和 Config,如下所示。

import { SocketIoModule, SocketIoConfig } from 'ngx-socket-io';
const config: SocketIoConfig = { url: 'http://localhost:5000', options: {} };

所以,一切正常,我也可以从讨论页面发送和接收评论。我想要的是仅为讨论页面而不是整个应用程序打开套接字的可能性,以及如何与我的服务器端控制器集成以保存到数据库中并检索它。

标签: node.jsexpressionic-frameworkmongoosesocket.io

解决方案


推荐阅读