How to integrate nodeJS + Socket.IO and PHP?

前端 未结 3 1375
再見小時候
再見小時候 2020-11-27 09:11

I have recently been looking around, to find a good way to communicate between nodeJS and PHP. Here is the idea : nodeJS is still quite new, and it can be kind of tricky to

3条回答
  •  甜味超标
    2020-11-27 09:36

    Try similar or you can check my blog for complete sample code on nodejs


    On your page side:

    • Load Socket JS

    https://cdnjs.cloudflare.com/ajax/libs/socket.io/2.2.0/socket.io.js

    • Make object of the socket

    var socket = io();

    • Use the emit function to send data to nodeserver.

    socket.emit('new_notification', {
    message: 'message',
    title: 'title',
    icon: 'icon',
    });

    So now your code will be look like

    
    
    var socket = io(); 
    
    $(document).ready(function($) {
      $('.rules-table').on('click', '.runRule', function(event) {
        event.preventDefault();
        /* Act on the event */
        var ruleID = $(this).parents('tr').attr('id');
    
        // send notification before going to post 
        socket.emit('new_notification', {
            message: 'Messge is ready to sent',
            title: title,
            icon: icon,
        });
        $.ajax({
          url: '/ajax/run-rule.php',
          type: 'POST',
          dataType: 'json',
          data: {
            ruleID: ruleID
          },
        })
        .done(function(data) {
          console.log(data);
    
          // send notification when post success 
          socket.emit('new_notification', {
            message: 'Messge was sent',
            title: title,
            icon: icon,
          });
    
        })
        .fail(function() {
          console.log("error");
    
          // send notification when post failed 
          socket.emit('new_notification', {
            message: 'Messge was failed',
            title: title,
            icon: icon,
          });
        })
        .always(function() {
          console.log("complete");
        });
    
      });
    });
    

    Now on Node server side make handler for your request to get your request and send a message to all connected devices/browsers(server.js)

    var app = require('express')();
    var http = require('http').Server(app);
    var io = require('socket.io')(http);
    
    app.get('/', function(req, res) {
       res.sendfile('index.html');
    });
    
    
    io.on('connection', function (socket) {
      socket.on( 'new_notification', function( data ) {
        console.log(data.title,data.message);
    
        // Now Emit this message to all connected devices
        io.sockets.emit( 'show_notification', { 
          title: data.title, 
          message: data.message, 
          icon: data.icon, 
        });
      });
    });
    
    http.listen(3000, function() {
       console.log('listening on localhost:3000');
    });
    

    Now the client/browser/client side make a receiver to receive socket message from node server

       
    
    var socket = io();
    
    /**
     * Set Default Socket For Show Notification
     * @param {type} data
     * @returns {undefined}
     */
    socket.on('show_notification', function (data) {
        showDesktopNotification(data.title, data.message, data.icon);
    });
    /**
     * Set Notification Request
     * @type type
     */
    function setNotification() {
        showDesktopNotification('Lokesh', 'Desktop Notification..!', '/index.jpeg');
        sendNodeNotification('Lokesh', 'Browser Notification..!', '/index.jpeg');
    }
    /**
     * Check Browser Notification Permission
     * @type window.Notification|Window.Notification|window.webkitNotification|Window.webkitNotification|Window.mozNotification|window.mozNotification
     */
    var Notification = window.Notification || window.mozNotification || window.webkitNotification;
    Notification.requestPermission(function (permission) {
    });
    /**
     * Request Browser Notification Permission 
     * @type Arguments
     */
    function requestNotificationPermissions() {
        if (Notification.permission !== 'denied') {
            Notification.requestPermission(function (permission) {
            });
        }
    }
    /**
     * Show Desktop Notification If Notification Allow
     * @param {type} title
     * @param {type} message
     * @param {type} icon
     * @returns {undefined}
     */
    function showDesktopNotification(message, body, icon, sound, timeout) {
        if (!timeout) {
            timeout = 4000;
        }
        requestNotificationPermissions();
        var instance = new Notification(
                message, {
                    body: body,
                    icon: icon,
                    sound: sound
                }
        );
        instance.onclick = function () {
            // Something to do
        };
        instance.onerror = function () {
            // Something to do
        };
        instance.onshow = function () {
            // Something to do
        };
        instance.onclose = function () {
            // Something to do
        };
        if (sound)
        {
            instance.sound;
        }
        setTimeout(instance.close.bind(instance), timeout);
        return false;
    }
    

提交回复
热议问题