Node's Power Meal

    @noreajs/realtime
    TypeScript icon, indicating that this package has built-in type declarations

    0.0.9 • Public • Published

    Norea.js Realtime

    This package is a set of tools intended to facilitate the integration of real time in node.js applications. It is part of the Norea.js framework but can also be used in any other application.

    Features

    • Socket.io : Start a server socket and use it throughout the application

    Installation

    After initializing your Node.js project installed the package as follows:

    npm install @noreajs/realtime --save

    Note for typescript developers: The package already has his types definitions.

    Socket.io

    Socket.IO enables real-time bidirectional event-based communication.

    Express application example (Typescript)

    import express from "express";
    import http from "http";
    import SocketIOServer from "@noreajs/realtime";
    import { Socket, Server } from "socket.io";
    
    const app = express();
    
    const httpServer = http.createServer(app);
    
    /**
     * Socket.io server initialization
     */
    const socketIoServer = new SocketIOServer({ server: httpServer }).namespace({
      middlewares: [
        async (socket, fn) => {
          console.log("Here a middleware!");
          // always call fn at the end of a middleware
          fn();
        },
      ],
      onConnect: (io, namespace, socket) => {
        console.log(`Namespace ${namespace.name}: Socket ${socket.id} connected`);
      },
      onDisconnect: (io, namespace, socket, reason: any) => {
        console.log(
          `Namespace ${namespace.name}: Socket ${socket.id} disconnected`,
          reason
        );
      },
    });
    
    /**
     * Inject socket.io server to every request
     */
    app.use((req, res, next) => {
      // set socket.io server
      res.locals.socketServer = socketIoServer.getServer();
      // continue the request
      next();
    });
    
    app.get("/", function (req, res) {
      if (res.locals.socketServer) {
        /**
         * Get socket.io Server in a request
         */
        const socketIoServer = res.locals.socketServer as Server;
        socketIoServer.clients((err: any, clients: string[]) => {
          if (err) {
            res.status(500).json(err);
          } else {
            res.status(200).send(`Hello world! ${clients.length} users online!!`);
          }
        });
      } else {
        res.send("Hello World");
      }
    });
    
    httpServer.listen(3000);

    Norea.js example (Typescript)

    import { NoreaBootstrap } from "@noreajs/core";
    import apiRoutes from "./api.routes";
    import { SocketIOServer } from "..";
    
    /**
     * Socket.io server initialization
     */
    const socketIoServer = new SocketIOServer().namespace({
      middlewares: [
        async (socket, fn) => {
          // update middleware
          console.log("Here is a global middleware!");
          fn();
        },
      ],
      onConnect: (io, namespace, socket) => {
        console.log(`Namespace ${namespace.name}: Socket ${socket.id} connected`);
        if (socket.user)
          console.log(`Namespace ${namespace.name}: user ${socket.user} connected`);
      },
      onDisconnect: (io, namespace, socket, reason: any) => {
        console.log(
          `Namespace ${namespace.name}: Socket ${socket.id} disconnected`,
          reason
        );
      },
    });
    
    /**
     * Create a new Norea.js App
     */
    const app = new NoreaBootstrap(apiRoutes, {
      forceHttps: false,
      beforeStart: (app) => {
        // inject socket.io server to every request
        app.use((req, res, next) => {
          // set socket.io server
          res.locals.socketServer = socketIoServer.getServer();
          // continue the request
          next();
        });
      },
      afterStart: (app, server, port) => {
        console.log("@noreajs/realtime test server");
        console.log("The api is running on port", port);
    
        // attach the socket server to the http/https server instance
        socketIoServer.attach(server);
      },
    });
    
    /**
     * Start your app
     */
    app.start(3000);

    Install

    npm i @noreajs/realtime

    DownloadsWeekly Downloads

    9

    Version

    0.0.9

    License

    MIT

    Unpacked Size

    43.7 kB

    Total Files

    31

    Last publish

    Collaborators

    • lambou