1

我正在使用 private_pub 制作私人聊天应用程序,我的问题是如何使用 private_pub 取消订阅频道?

感谢您的帮助

4

1 回答 1

0

如果您在您的网站中大量使用 pjax 或 ajax 并且您正在使用 ajax 加载的页面您有 private_pub subscribe 方法,您会发现它在搜索了很多关于我发现这些来自 privat_pub javascript 文件的 fork 后订阅了很多次解决了这些问题

var PrivatePub = (function (doc) {
 var self = {
connecting: false,
fayeClient: null,
fayeCallbacks: [],
subscriptions: {},
subscriptionCallbacks: {},

faye: function(callback) {
  if (self.fayeClient) {
    callback(self.fayeClient);
  } else {
    self.fayeCallbacks.push(callback);
    if (self.subscriptions.server && !self.connecting) {
      self.connecting = true;
      if (typeof Faye === 'undefined') {
        var script = doc.createElement("script");
        script.type = "text/javascript";
        script.src = self.subscriptions.server + ".js";
        script.onload = self.connectToFaye;
        doc.documentElement.appendChild(script);
      } else {
        self.connectToFaye();
      }
    }
  }
},

connectToFaye: function() {
  self.fayeClient = new Faye.Client(self.subscriptions.server);
  self.fayeClient.addExtension(self.fayeExtension);
  for (var i=0; i < self.fayeCallbacks.length; i++) {
    self.fayeCallbacks[i](self.fayeClient);
  };
},

fayeExtension: {
  outgoing: function(message, callback) {
    if (message.channel == "/meta/subscribe") {
      // Attach the signature and timestamp to subscription messages
      var subscription = self.subscriptions[message.subscription];
      if (!message.ext) message.ext = {};
      message.ext.private_pub_signature = subscription.signature;
      message.ext.private_pub_timestamp = subscription.timestamp;
    }
    callback(message);
  }
},

sign: function(options) {
  if (!self.subscriptions.server) {
    self.subscriptions.server = options.server;
  }
  if (!self.subscriptions[options.channel]) {
    self.subscriptions[options.channel] = options;
    self.faye(function(faye) {
      faye.subscribe(options.channel, self.handleResponse);
    });
  }
},

handleResponse: function(message) {
  if (message.eval) {
    eval(message.eval);
  }
  if (callback = self.subscriptionCallbacks[message.channel]) {
    callback(message.data, message.channel);
  }
},

subscribe: function(channel, callback) {
  self.subscriptionCallbacks[channel] = callback;
}
 };
  return self;
   }(document));

试试看。

于 2013-04-22T17:06:47.573 回答