|
They're different technologies.
SignalR is a wrapper around web sockets that can send data back to the browser (which isn't normally possible using HTTP, although SignalR should fallback to long polling if sockets fail or aren't supported).
RabbitMQ (and ZeroMQ and ServiceBus) are queueing technologies, which support sending some data to a queue (or topic) where listener(s) will pick it up and do something with that data.
I can see how queueing can be an alternative to sockets, but sockets are usually not a good (or even possible) alternative to queues.
|
|
|
|
|
That looked good to me too, and also NATS (especially with future Docker microservices development in mind), but one of my colleagues already beat me to it with a Proof of Concept using ZeroMQ before I could even start a discussion about it, guess I'm getting too old and slow
And I must say, the more I read about ZeroMQ the more enthousiastic I get, it's even developed by a Dutch guy !
|
|
|
|
|
Never heard of NATS (just read your experience on that list).
My biggest objection to ZeroMQ would be the following:Some guy named Tim wrote: More complicated scenarios require more setup
ZeroMQ is very fast due to its simplicity, but as a result of this, doing anything harder than passing messages between 2 peers will require a lot more work from the user. SignalR is (usually) a one-to-many broadcast, with support for channels.
That sounds more like topics than queues, and according to this Tim topics aren't supported in ZeroMQ.
RabbitMQ (and ServiceBus) do support topics out of the box.
Although reading the ZeroMQ website it also seems they support topics as well, so Tim might just be a dirty little liar
|
|
|
|
|
ZeroMQ's fine - I've used it in some projects at work. I've always got the feeling that Martin Sustrik (who then went on to start nanomsg - another lightweight messaging system) was the main man in the development, until him and Hintjens had a falling out...
Main difference between ZeroMQ & other messaging systems is the lack of a separate broker server, which is an advantage for some use cases (it was for the one we had), but probably not for others. Being able to support messaging between & within processes (where in-process messaging uses a different, more efficient transport) was also a plus point for us.
We only use the REQ-REP setup, but PUB-SUB (for data distribution) is also on the cards for future developments.
We layered Protocol Buffers on top, to provide message structure. That also worked well.
Java, Basic, who cares - it's all a bunch of tree-hugging hippy cr*p
|
|
|
|
|
Thanks, useful information !
|
|
|
|
|
I thought RabbitMQ was a message que system. Does RabbitMQ implement WebSocket type of technology?
|
|
|
|
|
I didn't think so, but then I found RabbitMQ Web STOMP Plugin — RabbitMQ[^].
I'm not sure how Rick wants to implement queueing in a browser, but with over 350,000 packages in the npm repository I'm sure there's one for connecting your queue to JavaScript
|
|
|
|
|
I'm always interested in talking about "WebSocket" technology.
I'm using Firebase in a project right now and I've created a firebase example you may find interesting.
Here is the most simple example where you can move a game pawn in your browser window and see it move (across the Internet) in the other person's browser.
pawns[^]
I also wrote up an article on SignalR, but unfortunately it is using a little older version of SignalR : Beginner's Guide to Using SignalR via ASP.NET[^]
Possible Way To Test?
You may like to open the browser on a few different devices and try it out to see if you see the same problems you are seeing in your app. If you see the problems it may be the firewall or network you are on.
Here's a direct link to the SignalR one you can try:
pawns[^]
It's a weird URL but that is because I wrote it a while back and the URL that it is coded up with is very important in the over all project. It's just anonymous link to my web site: raddev.us
You can test simply by moving a game pawn around and seeing it move in other browsers.
Open up a few browser windows and try it out and let me know.
|
|
|
|
|
Thanks, I tried your pawns application (years ago I think) and that worked ok. The problem with our implementation might be that we use the self-hosted version of SignalR and a mix of .NET and .NET Core applications.
Can't give more details because only my colleagues have full insight in this complex software.
|
|
|
|
|
RickZeeland wrote: Can't give more details because only my colleagues have full insight in this complex software.
I totally understand. My example is the most simple and basic thing possible, but when delving into real solutions things get complex fast. Wish I had more info to give you help but I know even with my simple example I ran into some real challenges.
Good luck.
|
|
|
|
|
|
Thanks I really appreciate that.
SignalR and WebSocket tech is really interesting, but SignalR can be quite confusing to work with -- challenges with auth and security, etc. and getting it to work when deployed.
|
|
|
|
|
It sounds to me like another MS com tool that requires a lot of configuration and is too easy to break: WCF. When it works it works great, but when it doesn't it's very stubborn about it!
|
|
|
|
|
I'm confused...SignalR is not a message queue...it's a communication link. You would usually use SignalR in conjunction with a message queue if you needed message queuing. The client would connect with SignalR, then the SignalR thread would queue the item in the message queue system and wait for a response to send back to the client. The important distinction here is that the SignalR thread keeps a connection with the client in order to notify. It can sort of be used like a message queue, but it's main characteristic is the continued connection to the client for notification and there is no queue. There can be performance implications in that each call to SignalR can launch an action concurrently and you can overload the server, but with a message queue, you can control how many threads or processes are servicing each queue and never have more concurrent processes than that. Then you can have as many SignalR threads waiting around for results to send back to the client.
|
|
|
|
|
Just a wild stab in the dark, but is Symantec Endpoint Protection involved in the equation?
I wanna be a eunuchs developer! Pass me a bread knife!
|
|
|
|
|
Good one, we'll check that !
|
|
|
|
|
What version of SignalR are you using, i.e. .net framework or .net core?
BTW, they never tell you that if SignalR is on a port, in production, it's likely the firewall will block you at most companies.
|
|
|
|
|
I know they are using self hosted .NET Core SignalR and maybe .NET too ...
Microsoft.AspNet.SignalR.Core.dll 2.2.6
modified 14-Jun-19 2:25am.
|
|
|
|
|
Having a right skill is knowledge. If you don't know, then don't blame/insult the tool. Rather try to acquire the knowledge.
|
|
|
|
|
But not all tools are created equal.
I wanna be a eunuchs developer! Pass me a bread knife!
|
|
|
|
|
did u enable trace log..
Caveat Emptor.
"Progress doesn't come from early risers – progress is made by lazy men looking for easier ways to do things." Lazarus Long
|
|
|
|
|
Yes, but we did not get any wiser, that is the most frustrating thing about SignalR: you don't have a clue what is going on
|
|
|
|
|
|
Are you using the .NET Full Framework or the .NET core? I only started with .NET core 2.1 and built distributed batch processing work queue and it's working fine and even has good performance, tested crossplatform and scaled on aws cloud without problems. I did experiment with large messages (10MB) but (de)serialization performance caused me to stick to small packets and strip of unnecessary data.
|
|
|
|
|
The problems are mainly with .NET Core SignalR. Large messages is not what SignalR is meant for, and we only use small messages.
|
|
|
|