Давайте разберем проблему на несколько частей, начиная с переноса в браузер, о чем вы и просите.
Веб-сокеты - это способ установить двунаправленное соединение между сервером и клиентом. Это стандарт, реализованный большинством современных браузеров. Socket.IO - это абстракция, похожая на веб-сокет, которая может использовать веб-сокеты или другие транспортные средства под капотом. Первоначально он был построен как своего рода полифилл, позволяющий отправлять сообщения через веб-сокеты или даже длительный опрос. Использование Socket.IO не дает вам никакой дополнительной возможности , чем у вас только с браузером, но предоставляет некоторые хорошие абстракции для "комнат" и тому подобное.
Если вы отправляете данные только с сервера на клиент, веб-сокеты не являются идеальным выбором. Для потоковой передачи данных в целом более подходящими являются Fetch API и ReadableStream. Затем вы можете просто установить нормальное HTTP-соединение. Тем не менее, вам нужны данные в стиле событий, и для этого существуют события, отправленные сервером (SSE). https://developer.mozilla.org/en-US/docs/Web/API/Server-sent_events/Using_server-sent_events По сути, вы создаете экземпляр объекта EventSource на клиенте, указывая на URL-адрес на сервере. Клиент автоматически поддерживает соединение, переподключается при необходимости. Он также может синхронизироваться с точкой в потоке, предоставляя серверу последнее полученное сообщение, чтобы клиент мог быть пойман до настоящего времени.
Теперь, как ваша конечная точка сервера узнает, когда отправлять эти данные и что отправлять? В идеале вы будете использовать какую-то систему паб / подсистема. Эти возможности встроены в Redis, который обычно используется для этого. (Есть и другие, если вам по какой-то причине не нравится Redis.) По сути, когда ваш сервер получает что-то из приложения, приложение «публикует» сообщение на определенном канале, где его получают все «подписчики». , Ваш сервер будет тем EventSource и может просто передавать данные (проверяя их и проверяя подлинность, конечно же).