Nodejs服务器无法检测与Pubnub + SocketIO的连接

时间:2014-06-24 00:10:36

标签: javascript node.js socket.io webrtc pubnub

我的nodejs服务器无法检测新浏览器何时连接('连接'事件),我不知道原因。我将处理它的问题缩小了几天,并怀疑是否需要添加在浏览器上实现的pubnub套接字连接。

以下是我的server.js

var http    = require('http')
  , connect = require('connect')
  , io      = require('socket.io')
  , fs      = require('fs')
  , uuid    = require('node-uuid')
  , _       = require('lodash');

// pubnub!!! (how to initialize it for use on server)
var pubnub  = require('pubnub').init({
   channel:        "my_channel",
   publish_key:    "pub-key",
   subscribe_key:  "sub-c-key",
   uuid:           "Server",
   origin : 'pubsub.pubnub.com'
});  

pubnub.subscribe({
    channel: 'my_channel',
    callback: function(message) {
      console.log("Message received: ", message);
    },
    message:  'Server ready',
    presence: function(data) {
      console.log("Presense: ", data);
    },
    connect:   publish
});

// various socket.on() events omitted

var app = connect().use(connect.static(__dirname)).use(connect.directory(__dirname));
var server = http.createServer(app);
server.listen(8888);
io = io.listen(server);

io.sockets.on('connection', handleNewPeer);

到达html页面后,doConnect(isBroadcaster)功能从脚本标签运行

doConnect函数(在peer.js中):

var doConnect = function(isBroadcaster) {

  console.log("doConnect");
  // broadcaster or normal peer
  var user;
  if (isBroadcaster) 
    user = "Broadcaster";
  else 
    user = "Viewer";

  (function() {
  var pubnub_setup = {
    channel:       "my_channel",
    publish_key:   "pub-c-key",
    subscribe_key: "sub-c-key",
    user:          user
  };

  // Note removed the var
  socket = io.connect( 'http://pubsub.pubnub.com', pubnub_setup);

 // various socket.on() omitted

 })();

以下是socketIO& amp;它正在运作:

var doConnect = function(isBroadcaster) {
  socket = io.connect();
// various socket.on() omitted 
}

我的p2p视频网站是在Nodejs + SocketIO服务器上运行的WebRTC实现的。 我一直试图将pubnub纳入其中。认为这很容易,因为pubnub支持SocketIO(或者至少是客户端?)。真的没想到设置服务器端会很困难。

对此有任何意见吗?我觉得这很简单,我不能把手指放在

2 个答案:

答案 0 :(得分:1)

您使用的是什么版本的socket.io?

这可能无法解决。我使用的是版本1. +你试过了吗?

    io.on('connection', function(socket){
        console.log('user connected');
    });

答案 1 :(得分:1)

使用Node.JS

的服务器上的Socket.IO

带有PubNub的Socket.IO不提供Node.JS Socket.IO后端选项。但是,您可以直接将PubNub SDK用于on-connect事件。

NPM包

npm install pubnub

安装PubNub NPM后,您可以使用node.js服务器后端:

Node.js后端代码

// -=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-
// PubNub!!! (how to initialize it for use on server)
// -=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-
var pubnub = require('pubnub').init({
   publish_key   : "pub-key",
   subscribe_key : "sub-c-key",
   uuid          : "Server-ID"
});  

// -=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-
// On user Connect
// -=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-
function on_user_connect(data) {
  console.log( "User Connected: ", data.uuid );
}

// -=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-
// On user Leave
// -=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-
function on_user_leave(data) {
  console.log( "User Left: ", data.uuid );
}

// -=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-
// Open Socket Connection for User Join Events
// -=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-
pubnub.subscribe({
    channel  : 'my_channel',
    connect  :   connected
    message  : function(message) {
      console.log("Message received: ", message);
    },
    presence : function(data) {
      if (data.action == "leave")   on_user_leave(data);
      if (data.action == "timeout") on_user_leave(data);
      if (data.action == "join")    on_user_connect(data);
    }
});

function connected() {
  console.log('connected!');
}