Using individual RPCs for each message is fine. If, however, you are trying to get better performance on the server (not in transfer rates, but in processing rates), using a longer-lived bidi stream could be useful.
As I discussed
in my KubeCon talk (slides are near "PDF" and video is "link to session recording"), longer-lived bidi streams are harder to use and open you to different problems. Long-lived RPCs in particular can require special care. So make sure you are solving a big enough problem by using such streams, so that you don't introduce complexity for little gain. That isn't to say "don't use long-lived, bidi streams." Long-lived, bidi streams are a life-saver in some cases. Just make sure it is worth it.
At the bare minimum, on the client you would need to manually handle the bidi stream getting closed/killed, would likely want to enable keepalive, and probably would also need acks back from the server. If you don't get an ack for a message before the stream goes down, you'd have to re-send it. On server-side, it is commonly good to close the connection occasionally to spread load. It's easiest to send a response to the client asking it to close the stream, so that you don't lose messages (when server closes, messages the client sends will be lost).