Если коротко, то веб сокеты закрывают 2 давние проблемы:
- Уходит необходимость пинговать сервер через промежутки времени, что приводило к росту нагрузки на сервер и росту энергопотребления и потребления трафика.
- Скорость реакции на доставку сообщения самая высокая из возможных – фактически мгновенная. Например можно писать текст на устройстве и отображать набранные буквы на другом устройстве, с веб сокетами такое возможно, с http-нет. На веб сокетах делают например игры или чаты, т.е. те приложения где доставка информации должна быть максимально быстрой
Итак, веб сокет это средство мгновенной доставки сообщений. Стоит использовать его в таком качестве. Не стоит пытаться пропихивать через него большие объемы, для этого есть http и например воркеры которые поддерживают докачку, побайтовое чтение потока, умеют корректно работать самостоятельно и многое другое, заточенное на большие объемы и слабые каналы. Это замена push, но в отличие от push более быстрая и сервер на вашей стороне.
1С не поддерживает веб-сокеты из коробки, но есть 2 выхода:
- Сторонние библиотеки
- Поднять промежуточный сервер (типа того, как в приложении к статье)
Команды и особенности работы
ConnectWebSocket – соединиться с веб сокетом. Пример: hashMap.put("ConnectWebSocket","ws://192.168.1.41:8765")
WSOnConnectHandlers – подключить обработчики события успешного соединения с сокетом в формате архитектуры 2.0.
Пример: hashMap.put("WSOnConnectHandlers",json.dumps([{"action":"run","type":"python","method":"ws_connect"}] ))
WSOnMessageHandlers - подключить обработчики события получения сообщения в формате архитектуры 2.0. Само сообщение приходит в переменной WebSocketMessage
WSOnCloseHandlers - подключить обработчики события нормального завершения соединения в формате архитектуры 2.0.
WSOnFailureHandlers - подключить обработчики события потери соединения в формате архитектуры 2.0.
WebSocketSend – команда отправки сообщения в сокет.
CloseWebSocket – команда завершения соединения. Также можно закрывать соединения со стороны сервера например.
Особенности реализации в Simple:
- При разрыве соединения автоматически происходит переподключение каждую секунду. Чтобы остановить попытки надо удалить переменную ConnectWebSocket
- При начальном соединении автоматически посылается сообщение в формате id:<AndroidID> . Это можно использовать для идентификации пользователей например
Описание примера
В примере, как это принято в таких случаях, реализован простейший чат на Simple. Сервер (скрипт chat_server.py) зеркалирует сообщения между пользователями. Конфигурации на Simple являются клиентами чата. В архиве - конфигурация для Simple и скрипт сервера
Телеграмм-канал проекта, в котором масса всего полезного: https://t.me/devsimpleui