Я довольно новый в socket.io. Просто я хочу знать, есть ли возможность использовать сокет для определенной части приложения, а остальные продолжают работать с обычным http RESTful API?
Чтобы быть более точным c, я разработал приложение с ioni c 5 для внешнего интерфейса и nodejs, express и mongodb для внутреннего интерфейса.
Я добавил socket.io в свое приложение. Файл 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: {} };
Итак, все работает нормально, и я могу отправлять и получать комментарии со страницы обсуждения. То, что я хочу, это возможность открытия сокета только для страницы обсуждения, а не приложения enitre, а также как я могу интегрироваться со своим контроллером на стороне сервера для сохранения в базу данных и ее извлечения.