pocket.io
Version:
A minimalistic version of socket.io that weights about 1K instead of 60K
2 lines • 1.18 kB
JavaScript
function io(n,e){"use strict";
/*! (c) Andrea Giammarchi (ISC) */"object"==typeof n&&(n=(e=n||e).url);var t=(e||{}).JSON||JSON,o=!1,r=[],c={},i=new URL(n||location.href),s=new WebSocket([i.protocol.replace("http","ws"),"//",i.host,"/pocket.io/"].join(""));s.onopen=function(n){for(u.emit("connect"),o=!0;r.length;)s.send(r.shift())},s.onmessage=function(n){var e=t.parse(n.data),o=c[e.type];"connect"===e.type?(u.id=e.data,a(o)):e.data?a(o,e.data):a(o)},s.onerror=function(n){a(c.error,n)},s.onclose=function(n){s=null,a(c.close)};var u={close:function(){return s&&s.close(),u},emit:function(n,e){var c=t.stringify({type:n,data:e});return o?s.send(c):r.push(c),u},listeners:function(n){return c[n]||[]},hasListeners:function(n){return 0<u.listeners(n).length},on:function(n,e){return(c[n]||(c[n]=[])).push(e),u},once:function(n,e){var t=c[n]||(c[n]=[]);return t.push(function n(){t.splice(t.indexOf(n),1),e.apply(this,arguments)}),u},off:function(n,e){var t=c[n]||[],o=t.indexOf(e);return-1<o&&t.splice(o,1),u},send:function(n){return u.emit("message",n)}};return u.disconnect=u.close,u;function a(n){(n||[]).forEach(function(n){n.apply(u,this)},[].slice.call(arguments,1))}}