使用 express.io 转换角度控制器以获取实时数据



我是express.io.我的新手,我有一组代码在 socket.io 中运行,带有node.js并且在前端有角度,没有问题。我已经创建了服务器,它以 1000 毫秒的间隔发出一组数据。与客户端交互的服务器的示例代码是

var serverjson = [
                 {"Product": "REL", "BBP": "10", "BSP": "10.2", "LTP": "10.1" }, 
                 {"Product": "BEL", "BBP": "20", "BSP": "20.4", "LTP": "20"    }, 
                 {"Product": "MTL", "BBP": "50", "BSP": "50.5", "LTP": "50.1"  }, 
                 {"Product": "BSL", "BBP": "100", "BSP": "101", "LTP": "100.2" }
                 ];
// define interactions with client
app.io.route('ready', function(req){
    //send data to client
    setInterval(function(){
        for(i=0;i<serverjson.length;i++)
        {
            serverjson[i].BBP = Math.round((parseInt(serverjson[i].BBP) + Math.random())*100)/100;
            serverjson[i].BSP = Math.round((parseInt(serverjson[i].BSP) + Math.random())*100)/100;
            serverjson[i].LTP = Math.round((parseInt(serverjson[i].LTP) + Math.random())*100)/100;
        }
        var serverjsonstr = JSON.stringify(serverjson);
        req.io.emit('msg', {'msg': serverjsonstr});
    }, 1000);
});

在客户端

<!doctype html>
<html>
  <head>
    <title>express.io Test</title>
    <script src="/socket.io/socket.io.js"></script>
    <script src="https://ajax.googleapis.com/ajax/libs/jquery/1.7.2/jquery.js"></script>
  </head>
    <body>
        <script>    
          var io = io.connect();
          io.emit('ready');
          io.on('msg', function(data){
            $('#msg').text(data.msg);
          });
        </script>
        <div id="msg"></div>
      </body>
</html>

到目前为止,一切都在运行,问题.数据以间隔正确显示。但是在另一页中,我想使用角度控制器显示数据。我在socket.io中做了同样的例子,对于控制器,代码是

var apps = angular.module('stocksample', []);
apps.controller('StockListCtrl', function($scope, socket) { 
  $scope.stocks = [];
  socket.on('msg', function(data) {
        $scope.stocks = JSON.parse(data.msg);           
    });
});
apps.factory('socket', function($rootScope) {
    var socket = io.connect();
    return {
        on: function(eventName, callback) {
            socket.on(eventName, function() {
                var args = arguments;
                $rootScope.$apply(function() {
                    callback.apply(socket, args);
                });
            });
        },
    };
});

这对于 socket.io 运行良好,每当"味精"的io.emit发生并显示在其他页面时,它都会绑定股票数据。我需要用express.io为同一个控制器编码,请提供任何建议。帮助将不胜感激。

终于解决了。我忘了提供socket.emit('ready');在我的棱角分明的工厂里

所以工厂的代码现在是

apps.factory('socket', function($rootScope) {
    var socket = io.connect();
    socket.emit('ready');
    return {
        on: function(eventName, callback) {
            socket.on(eventName, function() {
                var args = arguments;
                $rootScope.$apply(function() {
                    callback.apply(socket, args);
                });
            });
        }
    };
});

最新更新