gpt4 book ai didi

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

转载 作者:行者123 更新时间:2023-11-30 17:25:30 25 4
gpt4 key购买 nike

我的 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 时的情况,它是如何工作的:

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

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

对此有任何意见吗?我认为这很简单,我就是无法理解

最佳答案

服务器上的 Socket.IO 使用 Node.JS

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

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!');
}

关于javascript - Nodejs 服务器无法检测到与 Pubnub+SocketIO 的连接,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/24376490/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com