是否可以在NodeJS和AngularJS之间使用socket.io

时间:2015-12-17 22:15:03

标签: angularjs node.js sockets

我有两个独立的应用程序(frontEnd和BackEnd)。 backEnd使用express框架在NodeJS中,FrontEnd在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);
    });    

感谢您的帮助

1 个答案:

答案 0 :(得分:0)

这就是我设置连接的方式。我不确定这是不是最好的方式,但它确实有效,而且到目前为止我还没有任何性能问题。

客户代码:

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"
  });
});