I’m trying to implement the logic for connecting a sender and a receiver for a file transfer, the handshake between a sender and a receiver. The basic high-level workflow I’m imagining is…
Sender : prep for transfer, create token, wait for receiver to connect Receiver : access download URL using token, wait for sender to start sending Sender : confirm Receiver has connected / is waiting, send Receiver : receive
*note: there can only be one receiver to a sender, meaning only 1 receiver can “download” the file the sender is sending
I’m using Jetty Continuations for long-polling the server which makes handling asynchronous events easy, but I’m not sure how to approach the design aspect. What is a good design pattern for the above workflow, * the handshake * between a sender and a receiver?
My goto strategy is to use a JMS queue for this class of problems. There are a variety of implementations out there with a ton of options. You may look for “Out Of Band” file transfers specifically, which is essentially what you are describing: Transferring a token (message) from a server that points to a file to be downloaded by the client. Also, this fits into your 1 receiver download requirement. A JMS queue can be configured to only allow a single client per message through transactional locking.
Don’t know if this really answers your question, but it may be a place to start.
Edit:
If you’re brand new to JMS, a good place to start would be messing around with ActiveMQ:
Homepage link
Doc referencing out of band file transfer
You will probably want to implement your own “BlobMessage” or just use a regular message and handle a url passed through it.
Oracle JMS 1.1 Tutorial
There are a lot of resources available for JMS because it is such an old standard.
Hope this helps!