成人国产在线小视频_日韩寡妇人妻调教在线播放_色成人www永久在线观看_2018国产精品久久_亚洲欧美高清在线30p_亚洲少妇综合一区_黄色在线播放国产_亚洲另类技巧小说校园_国产主播xx日韩_a级毛片在线免费

資訊專欄INFORMATION COLUMN

socket.io 之 engine.io

TwIStOy / 707人閱讀

engine.io
實(shí)現(xiàn)跨瀏覽器、跨設(shè)備雙向通信層

通信:Emitter
class Emitter {
    _subs: {};
    construtor (params?: object) {
        return(params && this.mixin(params));
    }
    
    mixin (params) {
       for (let key in Emitter.prototype) {
           params[key] = Emitter.prototype[key];
       }
       return params;     
    }
    
    on (event, fn) {
        (this._subs[event] = this._subs[event] || []).push(fn);
        return this;
    }
    once (event, fn) {
        function on () {
            this.off(event, fn);
            fn.apply(this, arguments);
        }
        
        on.fn = fn;
        this.on(event, on);
        return this;
    }
    
    off (event, fn) {
        if (0 === arguments.length) {
            this._subs = {};
            return this;
        }
        
        let callbacks = this._subs[event];
        if (!callbacks || !callbacks.length === 0) return this;
        if (1 === arguments.length) {
            delete this._subs[event];
            return this;
        }
        
        let cb;
        for (let i = 0; i < callbacks.length; i++) {
            cb = callbacks[i];
            if (cb === fn || cb.fn === fn) {
                callbacks.splice(i, 1);
                break;
            }
        }
        return this;
    }
    
    emit (event, ...args?: any) {
        callbacks = this._subs[event];
        callbacks.forEach((item)=>{
            item.apply(this.args);
        });
        return this;
    }
    
}

transports

base class [Transport]

websocket

class WS extends Transport {
   name: string = "websocket";
   supportsBinary: boolean = true;

   constructor (params) {
        super(params);
   }
   
   doOpen () {
       const uri = this.uri();
       const protocols = this.protocols;
       let opts = {
           agent: this.agent
       }
       

      // SSL options for Node.js client
      opts.pfx = this.pfx;
      opts.key = this.key;
      opts.passphrase = this.passphrase;
      opts.cert = this.cert;
      opts.ca = this.ca;
      opts.ciphers = this.ciphers;
      opts.rejectUnauthorized = this.rejectUnauthorized;
      if (this.extraHeaders) {
        opts.headers = this.extraHeaders;
      }
      if (this.localAddress) {
        opts.localAddress = this.localAddress;
      }

      try {
        this.ws = this.usingBrowserWebSocket ? (protocols ? new WebSocket(uri, protocols) : new WebSocket(uri)) : new WebSocket(uri, protocols, opts);
      } catch (err) {
        return this.emit("error", err);
      }
      this.addEventListeners();
   }

   doClose () {
        if (typeof this.ws !== "undefined") {
            this.ws.close();
        }
   }

   write () {
        
   }

   addEventListener () {
      this.ws.onopen = () => {
          this.onOpen();
      }
      
      this.ws.onclose = () => {
          this.onClose();
      }
      
      this.ws.onmessage = (ev) => {
          this.onData(ev.data);
      }
      
      this.ws.onerror = () => {
          this.onError("websocket error", e);
      }
   }
}

文章版權(quán)歸作者所有,未經(jīng)允許請(qǐng)勿轉(zhuǎn)載,若此文章存在違規(guī)行為,您可以聯(lián)系管理員刪除。

轉(zhuǎn)載請(qǐng)注明本文地址:http://systransis.cn/yun/95740.html

相關(guān)文章

  • 基于socket.io快速實(shí)現(xiàn)一個(gè)實(shí)時(shí)通訊應(yīng)用

    摘要:實(shí)時(shí)通訊越來越多應(yīng)用于各個(gè)領(lǐng)域。實(shí)現(xiàn)原生實(shí)現(xiàn)對(duì)象一共支持四個(gè)消息和。是基于的實(shí)時(shí)通信庫。服務(wù)器應(yīng)該用包含相同數(shù)據(jù)的乓包應(yīng)答客戶端發(fā)送探測(cè)幀由服務(wù)器發(fā)送以響應(yīng)數(shù)據(jù)包。主要用于在接收到傳入連接時(shí)強(qiáng)制輪詢周期。該間隔可通過配置修改。 隨著web技術(shù)的發(fā)展,使用場(chǎng)景和需求也越來越復(fù)雜,客戶端不再滿足于簡(jiǎn)單的請(qǐng)求得到狀態(tài)的需求。實(shí)時(shí)通訊越來越多應(yīng)用于各個(gè)領(lǐng)域。 HTTP是最常用的客戶端與服務(wù)端的...

    venmos 評(píng)論0 收藏0
  • socket.io一: 介紹

    摘要:在標(biāo)準(zhǔn)沒有推出之前,輪詢是唯一可行的方式通過瀏覽器也可以,但這里不做討論。這種方式存在延時(shí)且對(duì)服務(wù)端造成很大負(fù)載。直到年,才標(biāo)準(zhǔn)化一種基于套接字進(jìn)行收發(fā)數(shù)據(jù)的協(xié)議?,F(xiàn)如今主流瀏覽器均已支持。 socket.io提供了基于事件的實(shí)時(shí)雙向通訊 歷史 Web端與服務(wù)器間的實(shí)時(shí)數(shù)據(jù)傳輸?shù)氖且粋€(gè)很重要的需求,但最早只能通過AJAX輪詢?cè)儗?shí)現(xiàn)。在WebSocket標(biāo)準(zhǔn)沒有推出之前,AJAX輪詢是唯...

    william 評(píng)論0 收藏0
  • socket.io搭配pm2(cluster)集群解決方案

    摘要:對(duì)應(yīng)的,服務(wù)端返回第六個(gè)請(qǐng)求為方式的請(qǐng)求,用來獲取服務(wù)端對(duì)第五個(gè)請(qǐng)求的響應(yīng)。但是,官方的解決方案是每個(gè)進(jìn)程的服務(wù)器創(chuàng)建不同端口的服務(wù)器,專注用于握手和升級(jí),由做握手請(qǐng)求的代理。 可以收藏我的博客 socket.io與cluster 在線上系統(tǒng)中,需要使用node的多進(jìn)程模型,我們可以自己實(shí)現(xiàn)簡(jiǎn)易的基于cluster模式的socket分發(fā)模型,也可以使用比較穩(wěn)定的pm2這樣進(jìn)程管理工具。...

    娣辯孩 評(píng)論0 收藏0
  • 利用express+socket.io實(shí)現(xiàn)一個(gè)簡(jiǎn)易版聊天室

    摘要:用偽代碼來模擬下長(zhǎng)輪詢的過程前端利用下面函數(shù)進(jìn)行請(qǐng)求后端代碼做如下更改利用隨機(jī)數(shù)的大小來模擬是否有新數(shù)據(jù)有新數(shù)據(jù)來了長(zhǎng)輪詢的確減少了請(qǐng)求的次數(shù),但是它也有著很大的問題,那就是耗費(fèi)服務(wù)器的資源。 寫在前面 最近由于利用node重構(gòu)某個(gè)項(xiàng)目,項(xiàng)目中有一個(gè)實(shí)時(shí)聊天的功能,于是就研究了一下聊天室,在線demo|源碼,歡迎大家反饋。這個(gè)聊天室的主要利用到了socket.io和express。這個(gè)...

    Chaz 評(píng)論0 收藏0
  • 【Nodeweb通信Socket.IO

    摘要:簡(jiǎn)介是的一個(gè)模塊,他提供通過進(jìn)行通信的一種簡(jiǎn)單方式,協(xié)議很復(fù)雜,但是提供了服務(wù)器和客戶端雙方的組件,所以只需要一個(gè)模塊就可以給應(yīng)用程序加入對(duì)的支持。而且還能支持不同的瀏覽器。它們之間有什么區(qū)別呢區(qū)別在于的是持久性的。 環(huán)境:Node v8.2.1; Npm v5.3.0; OS Windows10 在web開發(fā)中,我們使用HTTP協(xié)議,HTTP協(xié)議是基于文本的單向通訊機(jī)制,當(dāng)我們想要從...

    xzavier 評(píng)論0 收藏0

發(fā)表評(píng)論

0條評(píng)論

最新活動(dòng)
閱讀需要支付1元查看
<