Socket.io没有流式传输到多个连接

时间:2012-11-12 01:41:24

标签: javascript node.js express socket.io

我正在尝试将推文流式传输到客户端,只要只有一个连接,一切正常。如果我正在浏览器的一个标签页中发送推文并在新标签页中打开该页面,则第一个标签页将停止接收新推文,只有第二个标签页会接收它们。

服务器代码。

io.sockets.on('connection', function (socket) {

  var twitter = require('ntwitter'),
  util = require('util'),
  twit = new twitter({
    consumer_key: '',
    consumer_secret: '',
    access_token_key: '',
    access_token_secret: ''
  });

 twit.stream('statuses/filter', {'locations':'-124.46, 24.31, -66.57, 49.23'}, 
    function(stream) {
       stream.on('data', function (data) {
         data.geo  ? socket.emit('twitter', data) : ''
    });
 });

客户代码:

var socket = io.connect()

socket.on('twitter', function (data) {

    //Do really awesome things.

});

我做错了什么?它必须简单。我无法想象它很难支持多个连接。

干杯

1 个答案:

答案 0 :(得分:1)

尝试将socket.emit更改为sockets.emit

io.sockets.on('connection', function (socket) {

  var twitter = require('ntwitter'),
  util = require('util'),
  twit = new twitter({
    consumer_key: '',
    consumer_secret: '',
    access_token_key: '',
    access_token_secret: ''
  });

 twit.stream('statuses/filter', {'locations':'-124.46, 24.31, -66.57, 49.23'}, 
    function(stream) {
       stream.on('data', function (data) {
         data.geo  ? sockets.emit('twitter', data) : ''
    });
 });

如果这不起作用,请在socket.broadcast.emit之外添加socket.emit,如下所示:

io.sockets.on('connection', function (socket) {

  var twitter = require('ntwitter'),
  util = require('util'),
  twit = new twitter({
    consumer_key: '',
    consumer_secret: '',
    access_token_key: '',
    access_token_secret: ''
  });

 twit.stream('statuses/filter', {'locations':'-124.46, 24.31, -66.57, 49.23'}, 
    function(stream) {
       stream.on('data', function (data) {
         data.geo  ? socket.emit('twitter', data) : ''
         data.geo  ? socket.broadcast.emit('twitter', data) : ''
    });
 });