I would use something like this https://getstream.io/
If your online marketplace generates any revenue at all, I recommend not doing it yourself as sockets can be a nightmare to scale if the project takes off.
Source: we built it ourselves and wish we had just used an off the shelf service and plugged in the auth part
Web sockets is definitely the right path, but if you're open to not re-inventing the wheel, I would add https://getstream.io/chat/ to the mix. They started with a chat sdk I believe, so it's a purpose built system.
Depending on what your data store is, there are databases that have "real-time" querying that could also help in this regard (Firebase, Parse server etc).
It's technically possible, but the implementation gets really complex, and the APIs difficult to use. You probably end up creating extra nesting with FrameLayouts, you have to accept Views as parameters or inflate them yourself, then if you want to pass values to those custom Views or if this happens inside a RecyclerView there's even more to take care of...
In Compose you just pass parameters around, and it "just works".
For an example, consider a component that displays a list and allows you to customize what an item in that list looks like. In Compose, that's this much code:
@Composable
fun MyList(itemView: @Composable (Int) -> Unit = { Text(it.toString()) }) {
LazyColumn {
items((1..100).toList()) { item ->
itemView(item)
}
}
}
With Views and XML, you need a RecyclerView, you need to provide your clients a way to provide Views into the adapter that's powering the list, then to populate them with data... It's an interesting exercise if you haven't had to do it before.
Getting back to the example I mentioned in my other comment, Stream's Android libraries, you can compare custom items in the XML message list vs custom items in the Compose message list.
Sendbird is probably a good choice based on what you've presented. They're big and out of YCom, and have the features you're after as far as I can tell. Personally I wouldn't even try Mirrorfly just based on the English quality on their site.
Stream, TalkJS, and ChatKitty (from /r/startups), are a few others you could look at too.
Note that I haven't actually used any of these, so they're not really real recommendations, just ones I've come across as a cofounder of a realtime communications SaaS. I might be interested in hearing about your experience with whoever you eventually go with though.
You could use Stream (https://getstream.io/). Here is a tutorial for Flutter - https://getstream.io/chat/flutter/tutorial/ . I've used their Chat service and widgets for ReactNative and the activity feeds in Angular Apps. Really easy and fast way to get your chat module completed quickly. Definitely more expensive from an operating cost point of view. If speed of delivery & reliability are more important I would give them a go.