This article covers Node.js for me, I guess.
This article covers Node.js for me, I guess.
I don't see why there would be anything stopping Go from being similarly capable as it also has a good reputation for concurrency and what I hear does preemptive scheduling.
Java can probably do anything except be fun and lightweight so assuming you want to figure out the hoops to jump through. I assume it could..
Elixir can do it with the ergonomics and expressiveness of Python/Ruby. If you enjoy that level of abstraction I recommend it.
Also versatile.
Personally I think just following the official guide [1] will give you all you need to get a taste of the language and the platform and decide if you like it or not.
If you were talking about websockets in particular I guess realistically most people use Phoenix Channels [2] that give you websockets in ten lines of code.
[0] https://elixir-lang.org/learning.html
[1] https://elixir-lang.org/getting-started/introduction.html
This talk by the same author is also a good introduction in video format: https://www.youtube.com/watch?v=JvBT4XBdoUE
https://github.com/centrifugal/centrifugo (Server/Admin)
https://github.com/centrifugal/centrifuge (Server core)
https://github.com/centrifugal/centrifuge-js (Library)
It's a complete solution, including server, admin panel and client library.
As a generalization (again, really depends what you're going to be doing), I'd expect people to get a lot further with a Go or Java based implementations. Specifically, if those connections are interacting with each other in any meaningful way, I think shared data is still too useful to pass up.
I've written a websocket server implementation in Zig(1) and Elixir(2)
(1) https://github.com/karlseguin/websocket.zig (2) https://github.com/karlseguin/exws
What does this mean? What are some scenarios where connections interact with each other? I work with dotnet. To me, every request is standalone and doesn’t need to know any other request exists. At the most, I can see doing some kind of caching where if someone does a GET /person/12345 and someone else does the same, I maybe able to do some caching. However, I don’t think this is what you meant by shared data.
Did you mean like if someone does a PUT /person/12345/email hikingfan@gmail.com instead of the next get request reaching to the database, you keep it in the application memory and just use it?
Or am I completely missing the point and you’re talking about near real-time stuff like calls and screen sharing?
It was being done 7-8 years ago. If you search you should find a few articles on this.
Anyway - there's a lot of "non-standard" stuff in ASP's code there.
Also IMHO it's better to have a strong typed language behind your project, if it will be big, dynamic languages and big projects tend to be a nightmare for me.
* As a build/compile-time concern, using Node doesn't preclude strong-typing, so maintainability is also not a strong argument against the runtime itself, given you can use e.g. TypeScript.
> In fact, Pingora crashes are so rare we usually find unrelated issues when we do encounter one. Recently we discovered a kernel bug soon after our service started crashing. We've also discovered hardware issues on a few machines, in the past ruling out rare memory bugs caused by our software even after significant debugging was nearly impossible.
For sure not everyone will be able to achieve that in their first try or when getting started, but for sure is possible, but with Node I'm not confident enough to say that, for sure if works to hack something quickly and put in online, with Rust it takes longer and there are not too many platforms yet where you can easily deploy your app.
[0] https://blog.cloudflare.com/how-we-built-pingora-the-proxy-t...
Check out https://github.com/panjf2000/gnet, it also has some links at the end.