[{"data":1,"prerenderedAt":331},["ShallowReactive",2],{"project-10685946":3},{"id":4,"name":5,"line":6,"line_source":7,"title":8,"url":9,"domain":10,"maker":11,"posted_at":12,"year":13,"points":14,"comments":15,"rank_in_year":16,"shown_in_year":17,"top":18,"tier":19,"category":20,"subcategory":21,"format":22,"keywords":23,"reception":29,"sentiment":30,"stance_mix":31,"scored_comments":35,"aspects":36,"strip":43,"post_text":45,"what":46,"said":88,"maker_in_thread":185,"shape":196,"grid":199,"attempts":293,"same_week":294,"maker_shows":38,"maker_hidden":323,"reader_version":324,"card":325},"10685946","Nchan","a pub\u002Fsub server as an Nginx module","title","Show HN: Nchan – a pub\u002Fsub server as an Nginx module","https:\u002F\u002Fnchan.slact.net","nchan.slact.net","slact",1449425206,2015,149,41,138,2565,6,"notable","infrastructure","pub\u002Fsub server","library",[24,25,26,27,28],"pub\u002Fsub","nginx module","websocket","long polling","eventsource","curious",0.176,{"positive":18,"neutral":32,"mixed":33,"critical":34},12,0,3,21,{"design":37,"docs":39,"execution":40,"idea":41,"performance":42},{"positive":38,"critical":33},1,{"positive":38,"critical":33},{"positive":38,"critical":38},{"positive":34,"critical":38},{"positive":33,"critical":38},[33,44,33,34,33,44,33,34,33,44,33,34,33,38,33,33,34,33,34,33,38,33,38,33,34,33,34,33,44,34,33,34,33,34,33,44,33,44,34,34],5,null,{"problem":47,"audience":45,"pricing":45,"motivation":57,"time_to_build":45,"stack":64,"openness":85,"stage":86,"team_size":87},{"value":48,"source":49,"evidence":50},"Real-time message broadcast to clients over HTTP, with persistence and horizontal scaling","maker",[51,54],{"id":52,"by":11,"text":53},"10686299","Yes, this is a different project, although they are related. Push Stream is a fork of my Nginx HTTP Push Module, so they both descend from the same original codebase. Push Stream…",{"id":55,"by":11,"text":56},"10686338","I'm not familiar with MQTT, I've just glanced over the spec right now. Nchan is basically a message broker with channels, optimized for message broadcast. MQTT is a TCP-level…",{"value":58,"source":49,"evidence":59},"Rewrite of the old Nginx HTTP Push Module, built to scale better",[60,63],{"id":61,"by":11,"text":62},"10685955","This is a huge refactoring of an old project of mine -- the Nginx HTTP Push Module. I'm wondering if anyone here has used it. Most importantly, I want feedback on the…",{"id":52,"by":11,"text":53},[65,71,75,81],{"value":66,"source":49,"evidence":67},"C",[68],{"id":69,"by":11,"text":70},"10686412","Nchan is about 12K lines of C, I'd say 2-5K of that is dealing with Nginx guts. To get rid of Nginx entirely, you'd need to add an event loop, forking and multiprocess…",{"value":72,"source":49,"evidence":73},"Nginx",[74],{"id":69,"by":11,"text":70},{"value":76,"source":49,"evidence":77},"Redis",[78],{"id":79,"by":11,"text":80},"10687880","Nice project, and a curious featureset overlap, too... > We have a concept of \"reliable pub sub\" [...] Does the redis store you have do something similar (I can not see backing…",{"value":82,"source":49,"evidence":83},"Lua (Redis scripts)",[84],{"id":79,"by":11,"text":80},"open_source","beta","unknown",{"praise":89,"objections":109,"requests":121,"questions":140,"alternatives":155},[90,102],{"value":91,"source":92,"evidence":93},"Clean client API and well-done documentation","commenter",[94,98],{"id":95,"by":96,"text":97},"10686229","jkarneges","I love the clean client API, e.g. the use of ETags with long-polling. In some ways it reminds me of our LiveResource protocol (http:\u002F\u002Fliveresource.org). It's still a work in…",{"id":99,"by":100,"text":101},"10688543","solyaris","great project! I retwitted: https:\u002F\u002Ftwitter.com\u002Fsolyarisoftware\u002Fstatus\u002F673798502049280000 Documentation is VERY well done. publisher: Curl examples are perfect. subscribers:…",{"value":103,"source":92,"evidence":104},"Modular design supporting multiple protocols",[105,108],{"id":106,"by":100,"text":107},"10688559",">All the cool kids were talking about it, so I thought I might as well support them, too. I agree with Sam Saffron (thanks Sam for al your githubcode) about some perplexity using…",{"id":95,"by":96,"text":97},[110,117],{"value":111,"source":92,"evidence":112},"Lacks reliable catch-up and per-message security that some users need",[113],{"id":114,"by":115,"text":116},"10687780","sams99","This is super interesting, I have a very similar project that we use at Discourse https:\u002F\u002Fgithub.com\u002FSamSaffron\u002Fmessage_bus clearly being an NGINX module nchan is going to be a…",{"value":118,"source":92,"evidence":119},"Limited channel multiplexing (max 4)",[120],{"id":79,"by":11,"text":80},[122,130],{"value":123,"source":92,"evidence":124},"Example JavaScript client and subscriber samples",[125,129],{"id":126,"by":127,"text":128},"10686729","comboy","Would be really cool if you could include some example JS client for this. I'm sure you have some for testing, so even if it's not production ready code it would make testing of…",{"id":99,"by":100,"text":101},{"value":131,"source":92,"evidence":132},"Standalone server without Nginx dependency",[133,137],{"id":134,"by":135,"text":136},"10686383","geekuillaume","I'm using Nginx Push Stream with NodeJS for a high-scale chat system (Soon to be released, completely Open-Source). The dependency on Nginx always bothers me. How hard do you…",{"id":138,"by":135,"text":139},"10686539","Okay, thanks for the information. The problem with doing the pubsub in NodeJS entirely is the way NodeJS handle connections. Each is separated and is accompanied by a big…",[141,148],{"value":142,"source":92,"evidence":143},"How does it compare to MQTT?",[144],{"id":145,"by":146,"text":147},"10686207","Raed667","How does this compare to MQTT ?",{"value":149,"source":92,"evidence":150},"Does it buffer messages for offline clients?",[151],{"id":152,"by":153,"text":154},"10686695","thesmart","Does Nchan broadcast messages that may have been missed by a client that was temporarily offline? When web client's navigate from page-to-page or enter sleep mode, client's will…",[156,164,168,174,181],{"value":157,"source":92,"evidence":158},"Nginx Push Stream",[159,163],{"id":160,"by":161,"text":162},"10686198","uyoakaoma","Is this different from the other module nginx push stream which offers websockets, long polling etc",{"id":134,"by":135,"text":136},{"value":165,"source":92,"evidence":166},"MQTT",[167],{"id":145,"by":146,"text":147},{"value":169,"source":49,"evidence":170},"Socket.io",[171],{"id":172,"by":11,"text":173},"10686137","I consider those two and socket.io my main competition. Nchan is built to scale, but of course you'd need some numbers to back that up. I plan on doing benchmarks once I iron out…",{"value":175,"source":92,"evidence":176},"Twisted or Tornado",[177],{"id":178,"by":179,"text":180},"10686118","Beltiras","Interesting project. I've up till now used Twisted or Tornado (actually swampdragon.net). My choice would be dependent on scalability and performance.",{"value":182,"source":92,"evidence":183},"MessageBus",[184],{"id":114,"by":115,"text":116},{"comments":186,"answered":187,"key":188},18,9,[189,190,193],{"id":61,"text":62},{"id":191,"text":192},"10686304","Interesting, I'll read through this. Nchan code is quite modular, so it would be pretty easy to add some kind of negotiation like this. Let's talk more. For reference, here's the…",{"id":194,"text":195},"10686857","Yep, I'll be adding an example js client, but I don't intend on standardizing this. Mostly because I'm also a js guy and I like mootools, and I don't want to start a…",{"commenters":197,"max_depth":18,"maker_replies":186,"first_comment_mins":34,"lifespan_hours":198},17,22,[200,202,204,206,208,209,213,216,218,220,222,224,226,228,231,233,235,237,239,240,241,243,245,248,250,252,254,257,259,263,267,269,271,273,274,275,277,280,284,288,290],[61,33,33,201,11,38],"maker\u002Fneutral\u002Fdocs",[95,33,44,203,96,33],"project\u002Fpositive\u002Fdesign",[191,33,33,205,11,38],"maker\u002Fpositive\u002Fidea",[126,33,34,207,127,33],"project\u002Fneutral\u002Fdocs",[194,33,33,201,11,38],[210,33,44,211,212,33],"10687233","project\u002Fpositive\u002Fexecution","ende42",[214,33,33,215,11,38],"10687585","maker\u002Fneutral\u002Fexecution",[217,33,34,207,212,33],"10688484",[219,33,33,201,11,38],"10690400",[99,33,44,221,100,33],"project\u002Fpositive\u002Fdocs",[223,33,33,201,11,38],"10690454",[114,38,34,225,115,33],"project\u002Fneutral\u002Fidea",[79,38,33,227,11,38],"project\u002Fneutral\u002Fexecution",[229,38,38,230,115,33],"10687997","project\u002Fcritical\u002Fidea",[232,38,33,225,11,38],"10688133",[106,38,33,234,100,33],"commenter\u002Fcritical\u002Fidea",[152,236,34,225,153,33],2,[238,236,33,227,11,38],"10686906",[134,34,34,225,135,33],[69,34,33,227,11,38],[138,34,38,242,135,33],"project\u002Fcritical\u002Fperformance",[244,34,33,227,11,38],"10686586",[246,34,38,247,135,33],"10686717","project\u002Fcritical\u002Fexecution",[249,34,33,227,11,38],"10686926",[160,251,34,225,161,33],4,[52,251,33,253,11,38],"project\u002Fneutral\u002Fperformance",[255,44,34,225,256,33],"10686765","jondubois",[258,44,33,227,11,38],"10686884",[260,18,44,261,262,33],"10686122","project\u002Fpositive\u002Fidea","ktt",[264,265,34,225,266,33],"10687951",7,"pablomolnar",[268,265,33,227,11,38],"10688115",[178,270,34,225,179,33],8,[172,270,33,272,11,38],"maker\u002Fneutral\u002Fperformance",[145,187,34,225,146,33],[55,187,33,225,11,38],[276,187,44,261,146,33],"10687115",[278,187,33,279,100,33],"10688571","commenter\u002Fpositive\u002Fidea",[281,282,44,261,283,33],"10686456",10,"gauravphoenix",[285,286,34,225,287,33],"10686051",11,"userbinator",[289,286,33,225,11,38],"10686089",[291,286,34,225,292,33],"10686597","johnmaguire2013",[],[295,300,304,309,314,318],{"id":296,"name":297,"points":298,"category":299},"10706203","Jukedeck",410,"creative",{"id":301,"name":302,"points":303,"category":20},"10676685","Acme-tiny",280,{"id":305,"name":306,"points":307,"category":308},"10690834","Lasergist.com",211,"web_saas",{"id":310,"name":311,"points":312,"category":313},"10703851","Adblock to Bitcoin",128,"security_privacy",{"id":315,"name":316,"points":317,"category":313},"10682971","Lego",93,{"id":319,"name":320,"points":321,"category":322},"10687288","Braindump",91,"productivity",false,"v2",{"id":326,"name":5,"line":6,"ai":323,"cat":20,"year":13,"points":14,"comments":15,"rec":29,"s":327,"top":18,"kw":328,"maker":11,"domain":10,"tier":19,"attempts":33,"strip":329,"url":9,"mix":330,"praise":91,"objection":111,"sub":21},10685946,0.18,[24,25,26,27,28],"0503050305030100303010103030530303050533",[18,32,33,34],1794036538327]