【问题标题】:Is it possible to use socket.io between NodeJS and AngularJS是否可以在 NodeJS 和 AngularJS 之间使用 socket.io
【发布时间】:2015-12-18 11:13:02
【问题描述】:

我有两个独立的应用程序(前端和后端)。后端在 NodeJS 中使用 express 框架,前端在 AngularJS 中。是否可以使用 socket.io 将消息从服​​务器(NodeJS)发送到客户端(AngularJS)?我怎么能这样做?我已尝试使用以下代码,但无法正常工作:

服务器代码

var app = require('express')();
var server = require('http').Server(app);
var io = require('socket.io')(server);

io.sockets.on('connection', function(socket) {
       //This message is not  showing 
      console.log("socket");
      socket.volatile.emit('notification', {message: 'push message'});
});

客户端代码

angular.module('pysFormWebApp')
  .factory('mySocket', function (socketFactory) {
      var mySocket = socketFactory({
            prefix: 'foo~',
            ioSocket: io.connect('http://localhost:3000/')            
      });
      mySocket.forward('error');
      return mySocket;
  });

angular.module('formModule')
  .controller('typingCtrl', ['$scope', 'mySocket', typingCtrl]);
    function typingCtrl ($scope, mySocket) {

    mySocket.forward('someEvent', $scope);
    $scope.$on('socket:someEvent', function (ev, data) {
      $scope.theData = data;
      console.log(data);
    });    

感谢帮助

【问题讨论】:

    标签: angularjs node.js sockets


    【解决方案1】:

    这就是我设置连接的方式。我不确定这是否是最好的方法,但它确实有效,并且迄今为止我还没有遇到任何性能问题。

    客户代码:

    angular.module('whatever').factory('socket', function ($rootScope) {
        var socket = io.connect('yourhost');
        return {
            on: function (eventName, callback) {
                socket.on(eventName, function () {
                    var args = arguments;
                    $rootScope.$apply(function () {
                        callback.apply(socket, args);
                    });
                });
            },
            emit: function (eventName, data, callback) {
                socket.emit(eventName, data, function () {
                    var args = arguments;
                    $rootScope.$apply(function () {
                        if (callback) {
                            callback.apply(socket, args);
                        }
                    });
                })
            }
        };
    });
    
    angular.module('whatever').controller("MainCtrl", MainCtrl);
    function MainCtrl($scope, socket) {
        socket.on('channelname', function(data) {
                console.log("message: " + data.message);
        });
    }
    

    服务器代码:

    var Express = require('express');
    var app = new Express();
    var server = Http.createServer(app);
    var io = require('socket.io')(server);
    io.on('connection', function(socket) {
      socket.emit("channelname", {
        message: "messagecontent"
      });
    });
    

    【讨论】:

    • 感谢它的工作,您可以添加的唯一更改是在使用 express 4 的情况下;将var Express = require('express'); 更改为var Express = require('express.io');
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2021-06-18
    • 1970-01-01
    • 2014-09-24
    • 2015-06-09
    • 1970-01-01
    • 2023-03-22
    • 1970-01-01
    相关资源
    最近更新 更多