6 ms·
Show HN: Peer-to-peer chat example built with JavaScript IPFS
- p2pchatter 9y agoHello, I made this! Please try it out and tell me what you think. Annotated source is public here: https://ipfs.io/ipfs/QmVUvLMxTEaVBpiQBiBBdnv7ZTwt7pv8BxNhpPCMixuRBT/docs/app.html https://ipfs.io/ipfs/QmVUvLMxTEaVBpiQBiBBdnv7ZTwt7pv8BxNhpPC...
- geoah 9y agoAn insane amount of `NullPointerException` messages are ruining the fun! :D
- dranoel0226 9y agothis is really cool, thanks! do you happen to know if / when this will work without a discovery server?
- jaynagpaul 9y agoYou can run an ipfs node locally if you wish
- mynewtb 9y agoHow does something like this scale? The more hashes there are in IPFS the more latency, or am I misunderstanding?
- p2pchatter 9y agoNo, there is no global database. You just share hashes that you know about, so no matter how many hashes there is, IPFS will still be the same speed.
- xiconfjs 9y agoMy Browser crashed after a few minutes...FF57 @ Ubuntu 16.04 :(
- rutierut 9y agoCrashed my browser too FF57 @ Mac OS 10.13
- creichenbach 9y agoSame here. Every message (including sign-on/-off) creates a node in the DOM tree that never gets removed. That's about 15-20 per second at the moment, so this might cause the eventual crash.
- p2pchatter 9y agoSeems to be a bug with js-ipfs or just a lot of DOM nodes... Not sure how to fix.
- tlrobinson 9y agoIt seems like it's repeating old messages over and over, then eventually crashing.
- sharemywin 9y agomine didn't crash yet, but the repeating of messages was kind of annoying.
- LoSboccacc 9y agovery interesting. seems to be handling the load exceptionally well, even if the system messages are interfering right now. latency is quite good to! there's something I don't understand from skimming the docs: if I want to use IPFS for a project of mine, do I have to deploy a IPFS backend or there's a default I can use? it's said to be peer-to-peer so unless the peer are shared across all projects small implementation may have issues to keep availability. edit: figured out there's a public gateway and one can also set up a private swarm. sweet!
- p2pchatter 9y agoYes, system messages got in the way. Try this version without them: https://ipfs.io/ipfs/QmbZVv9q52znhF9wN6GVi55EJQYq2BR6oeTgzVnLxFC7Uf https://ipfs.io/ipfs/QmbZVv9q52znhF9wN6GVi55EJQYq2BR6oeTgzVn... If you want to use IPFS, you can either import IPFS as a library (which this application does, everything is P2P in the browser, by using js-ipfs and including it in the application, you can see it in the annotated source here: https://ipfs.io/ipfs/QmbZVv9q52znhF9wN6GVi55EJQYq2BR6oeTgzVnLxFC7Uf/docs/app.html https://ipfs.io/ipfs/QmbZVv9q52znhF9wN6GVi55EJQYq2BR6oeTgzVn...) or you can connect to a gateway.
- StavrosK 9y agoEssentially, you'd just run the IPFS node and add files to it. Gateways won't store your files for long.
- tn_ 9y agoJust one tiny suggestion, let users create their display name. The hashed names make it a bit unreadable.
- p2pchatter 9y agoAlready possible, check out the input in the bottom left. Not very obvious, but it's there already.
- DennisP 9y agoRather than using a discovery server, couldn't you throw in the web3 library and use Ethereum for that purpose? You could keep the discovery server as backup for people not connected to Ethereum nodes, but for those that are you'd be fully decentralized. To keep things cheap you could use Ethereum's event logging rather than actually storing data on chain. In any case, this is great, I've been looking for something like this.
- p2pchatter 9y agoNot sure how that would work. You would have to make some transaction on the Ethereum network for other peers to discover you, correct? That kind of makes the barrier to entry a lot harder. On desktop, it's possible to use mDNS et al, we need something similar for browsers. Please tell me more how I could use Ethereum for discovery of other peers though, sounds interesting.
- DennisP 9y agoYes, so it'd only work for people running things like the Metamask browser plugin. It'd be nifty because it'd be fully decentralized, but for now, using the discovery server as backup would keep it working for everyone else.
- p2pchatter 9y agoHello again everyone! Seems like a lot more people joined the chat and the system messages are kind of getting into the way. I've released a updated version here: https://ipfs.io/ipfs/QmbZVv9q52znhF9wN6GVi55EJQYq2BR6oeTgzVnLxFC7Uf https://ipfs.io/ipfs/QmbZVv9q52znhF9wN6GVi55EJQYq2BR6oeTgzVn... Please try that version instead! If moderators see this message, please update the link!
- Rhapso 9y ago+100 awesome for the annotated source. A lot of these demos get released as minified JS which makes it kinda useless to use them as a guide or hack on them.
- p2pchatter 9y agoThanks! Exactly what I was thinking and it's much nicer when you can actually learn from the examples! The annotated source Rhapso is talking about is here: https://ipfs.io/ipfs/QmVUvLMxTEaVBpiQBiBBdnv7ZTwt7pv8BxNhpPCMixuRBT/docs/app.html https://ipfs.io/ipfs/QmVUvLMxTEaVBpiQBiBBdnv7ZTwt7pv8BxNhpPC...
- fiatjaf 9y agoHere we see the problem with using IPFS for, let's say, "dynamic" applications.
- p2pchatter 9y agoWould have been easy to fix, if this wasn't a demo. Either you use IPNS which are pointers to other data on IPFS. Or you can use DNS to point to IPFS hashes. The results are the same, you end up with a address that can be updated. For this example I didin't use it, as it's just a silly little example.
- QML 9y agoIPFS is a protocol for file-sharing, not for file-hosting, right?
- p2pchatter 9y agoWhat is the difference? You can host files on IPFS just as you can share files.
- fiatjaf 9y agoSo you write a chat message, store it on IPFS and then send the hash to the other party? Why don't you just send the message through whatever means you're sending the hash? This kind of app doesn't seem like a good fit for the whole IPFS idea. The same applies to Orbit.
- p2pchatter 9y agoNo, you clearly didn't read the annotated source that is linked both from the application and various comments here on this submission. The chat messages are being sent directly to the other party. Why is that? I think this app fits very good with IPFS. Same applies to Orbit.
- fiatjaf 9y agoSo it doesn't use IPFS at all.