- Отправка групповых текстовых сообщений с устройства iPhone, iPad или iPod touch
- Типы групповых разговоров
- Групповое сообщение iMessage
- Групповое сообщение MMS
- Групповое сообщение SMS
- Отправка группового текстового сообщения
- Групповые чаты в сообщениях на iOS
- Скрытая переписка на Айфоне: как создать секретный чат без использования мессенджеров
- Видео:
- Как на iPhone или iPad создать секретный чат без использования сторонних приложений
- Самый простой способ сделать чат в iOS приложении
- Шаг первый: подготовка UITableView
- Шаг второй: создание ячейки
- Шаг третий и последний: собрать все вместе
- Заключение
- Чат на iOS: используем сокеты
- Почему сокеты?
- Начинаем
- Запускаем серверное приложение
- Смотрим, что у нас в клиенте
- Создаём комнату для чата
- Создаём потоки ввода/вывода
- Открываем соединение
- Подключаемся к чату
- Протокол чата
- Реагирование на входящие сообщения
- Обрабатываем входящие сообщения
- Создаём протокол ChatRoomDelegate
- Отправление сообщений
- Подчищаем за собой
- Заключение
- UDP Sockets
- WebSockets
Отправка групповых текстовых сообщений с устройства iPhone, iPad или iPod touch
Оставайтесь на связи благодаря самым важным разговорам. Узнайте, как начать групповой разговор с друзьями, семьей и коллегами.
- Убедитесь, что на устройстве установлена последняя версия ОС iPadOS или iOS.
- Если вы используете устройство Apple, но не iPhone, обязательно зарегистрируйтесь в службе iMessage с использованием своего идентификатора Apple ID.
Типы групповых разговоров
Групповые разговоры можно разделить на три категории: групповые сообщения iMessage, MMS и SMS. Приложение «Сообщения» выбирает тип группового сообщения автоматически в зависимости от настроек, сетевого подключения и тарифного плана оператора сотовой связи. Например:
- Если и вы, и получатели используете устройства Apple, на которых включена служба iMessage, групповое сообщение будет отправлено через службу iMessage.
- Если пользователи из числа контактов не используют iMessage, будет отправлено групповое сообщение MMS или SMS.
Групповое сообщение iMessage
Эти сообщения отображаются в синих всплывающих окнах. Они отправляются через Apple, а не через вашего оператора связи, и защищены сквозным шифрованием. В групповом сообщении iMessage каждому участнику доступны следующие возможности.
- Отправка и получение фотографий, видеороликов и аудиосообщений
- Просмотр всех ответов в группе
- Отправка и получение различных эффектов (например, зарисовок, анимации, эффектов для всплывающих окон сообщений и т. д.)
- Делитесь местоположением с группой
- Присвоение группе названия, добавление или удаление пользователей, отключение сигналов уведомлений или выход из группы
Групповое сообщение MMS
Такие сообщения появляются в зеленых всплывающих окнах и передаются через службы оператора сотовой связи, а не компании Apple. В групповом сообщении MMS каждому участнику доступны следующие возможности.
- Отправка и получение фотографий и видеороликов
- Просмотр всех ответов в группе
- Отключение сигналов уведомлений
Групповое сообщение SMS
Такие сообщения тоже появляются в зеленых всплывающих окнах и передаются через службы оператора сотовой связи. К групповому сообщению SMS нельзя приложить мультимедийный файл, например фотографию или видеоролик. Все ответы на групповые сообщения SMS представляют собой отдельные текстовые сообщения, и получателям недоступны ответы других участников группы.
Узнайте, как выполнять переадресацию сообщений SMS/MMS на своих устройствах, например с iPad на Mac.
Отправка группового текстового сообщения
- Откройте приложение «Сообщения» и нажмите кнопку «Написать» .
- Введите имена или нажмите кнопку «Добавить»
, чтобы добавить пользователей из ваших контактов.
- Введите сообщение и нажмите кнопку «Отправить» .
При отправке группового сообщения MMS с iPhone убедитесь, что функция «Сообщения MMS» включена. Перейдите в меню «Настройки» > «Сообщения» и включите функцию «Сообщения MMS». Если отправка сообщений MMS или групповых сообщений недоступна, уточните у своего оператора, поддерживает ли ваш тарифный план отправку групповых сообщений MMS.
В iOS 15 и iPadOS 15 фотографии, ссылки и другое содержимое, отправляемое в групповом сообщении, будет отображаться в разделе «Отправлено Вам» соответствующих программ для содержимого. Если вы не хотите, чтобы фотографии и другое содержимое отображались в разделе «Отправлено Вам», перейдите к групповому сообщению, нажмите вверху цепочки сообщений и отключите параметр «Показывать в разделе „Отправлено Вам“».
Источник
Групповые чаты в сообщениях на iOS
В комментариях к статье “Секреты стандартного приложения Сообщения” меня попросили поподробней написать про групповые чаты в стандартном приложении сообщении. Вы просили – я отвечаю.
Да, Сообщения в iOS по умолчанию поддерживают возможность общаться нескольким людям в едином окне чата. Особенность такого общения – все люди должны иметь устройство на iOS или OS X. Собственно, требования аналогичны другим программам (Viber, WhatsApp и т.п). Но если другие программы мультиплатформенны, то здесь вы и ваши собеседники ограничены экосистемой Apple.
Чтобы создать групповой чат надо:
- Начать новое окно сообщений (иконка в правом верхнем углу).
- Добавить первый контакт. Возможно, программа вам покажет в окне будущего чата все сообщения от этого контакта.
- Через запятую добавить второй, третий и т.д. контакты.
Главное следить, чтобы в поле сообщения не высветилось SMS/MMS. Если высветится, значит вы добавили контакт, который не может принимать iMessage.
Чтобы внести изменения в настройки чата, жмите “Подробно”. Чат можно переименовывать, добавлять новых людей и удалять. Есть даже полезная опция “Не беспокоить”, именно для этого конкретного чата.
Удалять людей и покидать разговор можно, если только в группе не менее 4 человек.
Вот и всё, что нужно знать о групповых чатах в iOS. Если есть какие-то вопросы или дополнения, пишите в комментарях.
Источник
Скрытая переписка на Айфоне: как создать секретный чат без использования мессенджеров
Никто не хочет, чтобы о содержимом тайного письма узнали посторонние люди. Более того, далеко не все вообще хотят афишировать сам факт своей переписки. Но в iOS и iPadOS уже есть требуемые инструменты для сокрытия своего электронного общения. Эти системы помогут сделать так, чтобы о вашей переписке никто не узнал.
Видео:
Как на iPhone или iPad создать секретный чат без использования сторонних приложений
1. Для реализации почти шпионской функции понадобится стандартное приложение «Заметки» при этом должна быть включена синхронизация заметок с iCloud по пути Настройки → Ваше имя → iCloud.
И установите переключатель Заметки в положение Включено.
2. Откройте приложение Заметки, откройте страницу с папками и выберите папку Все iCloud (или любую другую в разделе iCloud).
3. Создайте новую заметку.
4. Введите заголовок заметки и нажмите кнопку с тремя точками в кружке. В появившемся меню выберите пункт «Поделиться заметкой».
5. Отправьте другому пользователю чата приглашение любым удобным из возможных способов. Конечно же у получателя сообщения должно быть мобильное устройство от Apple и тоже включена синхронизация заметок с iCloud.
Собственно говоря, вот и вся хитрость. Написанное вами не будет отображено ни в мессенджерах, ни в электронной почте, а появится автоматически в заметке пользователя. Обратная связь осуществляется точно так же.
Так выглядит скрытый чат в заметках на iPhone и iPad (для удобства, начинайте каждое новое сообщение с новой строки, например, используя символ тире):
6. Для того чтобы отключить все возможные уведомления о новых сообщениях в секретном чате, нажмите кнопку с тремя точками в кружке и выберите пункт «Управлять общей заметкой».
7. Установите переключатель «Скрыть уведомления» в положение Включено.
Источник
Самый простой способ сделать чат в iOS приложении
Шаг первый: подготовка UITableView
Для начала необходимо создать и правильно настроить UITableView. Я предпочитаю делать это кодом:
Важным моментом здесь является установка rowHeight и определение estimatedRowHeight.
Шаг второй: создание ячейки
Теперь переходим к самой интересной части – верстанию ячейки! Создайте новый файл, он должен быть сабклассом UITableViewCell, не забудьте поставить галочку на «Also create XIB file». Процесс верстки разобьем на шаги, чтобы было проще.
Перетащите в ячейку новый UIView и поставьте любой backgroundColor, а затем перетащите на этот вью новый UILabel. Теперь в Attributes Inspector для этой UILabel необходимо выставить 0 в поле Lines. Это позволит ячейке иметь несколько строк текста. Должно получиться вот так:
Теперь необходимо прицепить края лейбла к краям его супервью с небольшим отступом.
А теперь чистая магия! Прицепите левый, верхний и нижний край серой view к соответствующим краям ячейки, затем, отдельным шагом, создайте констрейнт от правого края серой view к правому краю view ячейки. Теперь выберите только что созданный констрейнт и откройте Attributes Inspector для него. В поле Relation необходимо выставить «Greater Than or Equal», а в поле Constant вставить число, например, 60. Этот констрейнт будет ограничивать максимальную ширину «пузырика» сообщения.
Переходим к последней части. Создайте констрейнт высоты для «пузырика» сообщения, а затем поставьте «Greater Than or Equal» в Relation и любое значение в поле Constant. Значение Constant будет минимальным размером «пузырика» по высоте, оно зависит от размера шрифта и отступов. Теперь создайте IBOutlet для лейбла и «пузырика» в класс ячейки.
Шаг третий и последний: собрать все вместе
Осталось только заполнить методы UITableViewDataSource и зарегистрировать нашу ячейку:
После этого остается только создать и вернуть нашу ячейку:
Заключение
Вам остается только сверстать такую же ячейку для исходящих сообщений и скруглить углы «пузырика». Согласитесь, способ максимально простой. Пропадает необходимость делать какие-либо вычисления высоты и ширины этого самого «пузырика», нам всего лишь надо делегировать эту работу AutoLayout’у. Вот так выглядит плюс-минус законченный проект:
Источник
Чат на iOS: используем сокеты
Picture created by rawpixel.com
В этой публикации мы опустимся на уровень TCP, изучим сокеты и средства Core Foundation на примере разработки приложения для чата.
Приблизительное время чтения публикации: 25 минут.
Почему сокеты?
Вы можете удивиться: «А зачем мне идти на уровень ниже, чем URLSession?» Если вы достаточно сообразительны и не задаётесь этим вопросом, переходите сразу к следующему разделу.
Отличный вопрос! Дело в том, что использование URLSession основано на протоколе HTTP, то есть связь происходит в стиле запрос-отклик, примерно следующим образом:
- запросить с сервера какие-то данные в формате JSON
- получить эти данные, обработать, отобразить, etc.
Но что, если нам нужно, чтобы сервер мог по своей инициативе передавать данные вашему приложению? Здесь HTTP оказывается не у дел.
Конечно, мы можем непрерывно дергать сервер и смотреть, если там данные для нас (aka polling). Или мы можем быть более изощренными и использовать long-polling. Но все эти костыли слегка неуместны в данном случае.
В конце концов, зачем ограничивать себя парадигмой request-response, если она подходит к нашей задаче чуть меньше, чем никак?
В этом руководстве вы научитесь, как погрузиться на более низкий уровень абстракции и напрямую использовать СОКЕТЫ в приложении для чата.
Вместо того, чтобы проверять сервер на наличие новых сообщений, наше приложение будет использовать потоки (streams), остающиеся открытыми на протяжении чат-сессии.
Начинаем
Загрузите исходные материалы. Там есть макет приложения-клиента и простой сервер, написанный на Go.
Вам не придется писать на Go, но вам нужно будет запустить серверное приложение, чтобы приложения-клиенты могли к нему подключаться.
Запускаем серверное приложение
В исходных материалах есть как скомпилированное приложение, так и исходник. Если у вас здоровая паранойя и вы не доверяете чужому откомпилированному коду, вы можете самостоятельно скомпилировать исходники.
Если же вы отважны, то откройте Terminal, перейдите в каталог с загруженными материалами и выполните команду:
Когда появится запрос, введите пароль. После этого вы должны увидеть сообщение
Listening on 127.0.0.1:80.
Замечание: серверное приложение запускается в привилегированном режиме (команда «sudo»), потому что прослушивает порт 80. Все порты с номерами меньше, чем 1024, требуют специального доступа.
Ваш чат-сервер готов! Можете перейти к следующему разделу.
то в этом случае вам необходимо при помощи Homebrew установить Go.
Если у вас нет и Homebrew, то нужно установить вначале его. Откройте Terminal и вставьте туда следующую строку:
/usr/bin/ruby -e \
«$(curl -fsSL https://raw.githubusercontent.com/Homebrew/install/master/install)»
Затем используйте эту команду для установки Go:
brew install go
По окончании перейдите в каталог с загруженными исходными материалами и скомпилируйте исходники серверного приложения:
go build server.go
Наконец, можно запустить сервер командой, приведенной в начале этого раздела.
Смотрим, что у нас в клиенте
Теперь откройте проект DogeChat, откомпилируйте его и посмотрите, что там есть.
Как видим, DogeChat сейчас позволяет ввести имя пользователя и перейти в раздел собственно чата.
Похоже, что разработчик, занимавшийся этим проектом, понятия не имел, как сделать чат. Так что всё, что у нас есть — это базовый UI и навигация. Сетевой слой будем писать мы. Ура!
Создаём комнату для чата
Чтобы перейти непосредственно к разработке, перейдите к ChatRoomViewController.swift. Это вьюконтроллер, который может получать введенный пользователем текст и отображать получаемые сообщения в тейблвью.
Так как у нас есть ChatRoomViewController, есть смысл разработать класс ChatRoom, который будет заниматься всей черновой работой.
Давайте подумаем о том, что будет обеспечивать новый класс:
- открытие соединения с приложением-сервером;
- подключение пользователя с заданным им именем к чату;
- передачу и получение сообщений;
- закрытие соединения по окончании.
Теперь, когда мы знаем, чего хотим от этого класса, жмём Command-N, выбираем Swift File и обзываем его ChatRoom.
Создаём потоки ввода/вывода
Заменим содержимое ChatRoom.swift вот этим:
Тут мы определяем класс ChatRoom и объявляем нужные нам свойства.
- Сначала мы определяем потоки ввода/вывода. Использование их парой позволит нам создать соединение на сокете между приложением и чат-сервером. Разумеется, мы будем отправлять сообщения, используя поток вывода, а получать — при помощи потока ввода.
- Далее мы определяем имя пользователя.
- И, наконец, мы определяем переменную maxReadLength, которой ограничиваем максимальную длину отдельного сообщения.
Теперь перейдите к файлу ChatRoomViewController.swift и добавьте эту строчку к списку его свойств:
Теперь, когда мы создали базовую структуру класса, пора заняться первым из намеченных дел: открытием соединения между приложением и сервером.
Открываем соединение
Возвращаемся к ChatRoom.swift и за определениями свойств добавляем этот метод:
Вот что мы тут делаем:
- сначала мы определяем две переменных для потоков сокета без использования автоматического управления памятью
- затем мы, используя эти самые переменные, создаем непосредственно потоки, привязанные к хосту и номеру порта.
У функции четыре аргумента. Первый — это тип распределителя памяти, который мы будем использовать при инициализации потоков. Вы должны использовать kCFAllocatorDefault, хотя есть и другие возможные варианты, в случае, если вы хотите изменить поведение потоков.
Затем мы задаем имя хоста. В нашем случае мы подключаемся к локальному серверу. Если у вас сервер расположен в другом месте, то тут можно задать его IP адрес.
Затем номер порта, которые прослушивает сервер.
Наконец, мы передаем указатели на наши потоки ввода/вывода, чтобы функция могла их инициализировать и подключить к создаваемым ей потокам.
Теперь, когда у нас есть инициализированные потоки, мы можем сохранить ссылки на них, добавив эти строки в конце метода setupNetworkCommunication():
Использование takeRetainedValue() применительно к неуправляемому объекту позволяет нам сохранить ссылку на него, и, одновременно, избежать в дальнейшем утечек памяти. Теперь мы можем использовать наши потоки где захотим.
Теперь нам нужно добавить эти потоки к циклу выполнения (run loop), чтобы наше приложение корректно отрабатывало сетевые события. Для этого добавим эти две строчки в конце setupNetworkCommunication():
Наконец пора поднять паруса! Чтобы начать, добавьте это в самом конце метода setupNetworkCommunication():
Теперь у нас есть открытое соединение между нашим клиентом и серверным приложением.
Мы можем скомпилировать и запустить наше приложение, но никаких изменений вы пока не увидите, потому что пока мы ничего не делаем с нашим соединением клиент-сервер.
Подключаемся к чату
Теперь, когда у нас есть установленное соединение с сервером, самое время начать с этим что-то делать! В случае чата, вам нужно сначала представиться, а затем вы сможете слать собеседникам сообщения.
Это приводит нас к важному выводу: так как у нас два типа сообщений, нам нужно как-то их различать.
Протокол чата
Одно из преимуществ использования уровня TCP состоит в том, что мы можем определить свой собственный «протокол» для взаимодействия.
Если бы мы использовали HTTP, то нам нужно было бы использовать эти разные словечки GET, PUT, PATCH. Нам нужно было бы формировать URL’ы и использовать для них правильные хедеры и все такое.
У нас же всего два типа сообщений. Мы будем слать
чтобы войти в чат и представиться.
И мы будем слать
msg:Hey, how goes it, man?
чтобы отправить сообщение всем респондентам в чате.
Это очень просто, но абсолютно несекюрно, поэтому не используйте подобный способ в критически важных проектах.
Теперь мы знаем, чего ожидает наш сервер и можем написать метод в классе ChatRoom, который позволит пользователю подключиться к чату. Единственный аргумент — это «ник» пользователя.
Добавьте этот метод внутри ChatRoom.swift:
- Сначала мы формируем наше сообщение, используя наш собственный «протокол»
- Сохраняем имя для дальнейшего использования.
- withUnsafeBytes(_:) обеспечивает удобный способ работы с небезопасным указателем внутри замыкания.
- Наконец мы отправляем наше сообщение в выходной поток. Это может выглядеть сложнее, чем можно было бы предположить, однако write(_:maxLength:) использует небезопасный указатель, созданный на предыдущем этапе.
Теперь наш метод готов, откроем ChatRoomViewController.swift и добавим вызов этого метода в конце viewWillAppear(_:).
Теперь откомпилируйте и запустите приложение. Введите ваш ник и тапните на return чтобы увидеть…
. что опять ничего не изменилось!
Постойте, все в порядке! Перейдите к окну терминала. Там вы увидите сообщение Вася has joined или что-то в этом роде, если ваше имя не Вася.
Это здорово, но хорошо бы иметь индикацию успешного подключения на экране своего телефона.
Реагирование на входящие сообщения
Сервер рассылает сообщения о присоединении клиента всем, кто есть в чате, в том числе и вам. К счастью, в нашем приложении уже есть все для отображения любых входящих сообщений в виде ячеек в таблице сообщений в ChatRoomViewController.
Всё, что вам нужно сделать — использовать inputStream, чтобы «отловить» эти сообщения, преобразовать их в экземпляры класса Message, и передать их таблице для отображения.
Чтобы иметь возможность реагировать на входящие сообщения, вам необходимо, чтобы ChatRoom соответствовал протоколу StreamDelegate.
Для этого внизу файла ChatRoom.swift добавьте это расширение:
Теперь объявим того, кто станет делегатом inputStream‘а.
Добавьте эту строчку в метод setupNetworkCommunication() прямо перед вызовами schedule(in:forMode:):
Теперь добавим в расширение реализацию метода stream(_:handle:):
Обрабатываем входящие сообщения
Итак, мы готовы приступить к обработке входящих сообщений. Событие, которое нас интересует — .hasBytesAvailable, которое показывает, что поступило входящее сообщение.
Напишем метод, который обрабатывает эти сообщения. Ниже только что добавленного метода напишем следующее:
- Устанавливаем буфер, в который будем читать поступающие байты.
- Крутимся в цикле, пока во входящем потоке есть, что читать.
- Вызываем read(_:maxLength:), который считывает байты из потока и помещает их в буфер.
- Если вызов вернул отрицательное значение — возвращаем ошибку и выходим из цикла.
Нам нужно вызывать этот метод как только у нас во входящем потоке есть данные, так что идем к оператору switch внутри метода stream(_:handle:), находим переключатель .hasBytesAvailable и вызываем этот метод сразу после оператора print:
В этом месте у нас готовенький буфер полученных данных!
Но нам еще нужно превратить этот буфер в содержимое таблицы сообщений.
Разместим этот метод за readAvailableBytes(stream:).
Сначала мы инициализируем String, используя буфер и размер, которые передаем в этот метод.
Текст будет в UTF-8, по окончании освобождаем буфер, и делим сообщение по символу ‘:’, чтобы разделить имя отправителя и собственно сообщение.
Теперь мы разбираем, наше это сообщение или пришло от другого участника. На продакте здесь можно создавать что-то вроде уникального токена, для демки достаточно этого.
Наконец, их всего этого хозяйства мы формируем экземпляр Message и возвращаем его.
Для использования этого метода добавьте следующий if-let в конце цикла while в методе readAvailableBytes(stream:), сразу после последнего комментария:
Сейчас всё готово для того, чтобы передать кому-то Message… Но кому же?
Создаём протокол ChatRoomDelegate
Итак, нам нужно проинформировать ChatRoomViewController.swift о новом сообщении, но у нас нет ссылки на него. Так как он содержит сильную ссылку на ChatRoom, мы можем попасть в ловушку цикла сильных ссылок.
Это идеальное место для создания протокола-делегата. ChatRoom всё равно, кому нужно знать про новые сообщения.
Вверху ChatRoom.swift добавим новое определение протокола:
Теперь внутри класса ChatRoom добавим слабую ссылку для хранения того, кто станет делегатом:
Теперь допишем метод readAvailableBytes(stream:), добавив следующую строчку внутри конструкции if-let, под последним комментарием в методе:
Возвращаемся к ChatRoomViewController.swift и добавляем следующее расширение класса, которое обеспечивает соответствие протоколу ChatRoomDelegate, сразу после MessageInputDelegate:
Исходный проект уже содержит необходимое, так что insertNewMessageCell(_:) примет ваше сообщение и отобразит в тейблвью правильную ячейку.
Теперь назначим вьюконтроллер делегатом, добавив это во viewWillAppear(_:) сразу после вызова super.viewWillAppear()
Теперь откомпилируйте и запустите приложение. Введите имя и тапните return.
Вы увидите ячейку о вашем подключении к чату. Ура, вы успешно послали сообщение серверу и получили от него ответ!
Отправление сообщений
Теперь, когда ChatRoom может отправлять и получать сообщения, самое время обеспечить пользователю возможность отправлять свои собственные фразы.
В ChatRoom.swift добавьте следующий метод в конце определения класса:
Этот метод похож на joinChat(username:), который мы написали раньше, за исключением того, что у него префикс msg перед текстом (для обозначения того, что это реальное сообщение в чат).
Так как мы хотим отсылать сообщения по кнопке Send, возвращаемся к ChatRoomViewController.swift и находим там MessageInputDelegate.
Здесь мы видим пустой метод sendWasTapped(message:). Чтобы послать сообщение передайте его chatRoom:
Собственно, это всё! Так как сервер получит сообщение и перешлёт его всем и каждому, ChatRoom будет уведомлен о новом сообщение тем же образом, как и при присоединении к чату.
Скомпилируйте и запустите приложение.
Если вам не с кем сейчас початиться, запустите новое окно Терминала и введите:
nc localhost 80
Это подключит вас к серверу. Теперь вы можете подключиться к чату, используя тот же «протокол»:
А так — послать сообщение:
msg:Ay mang, wut’s good?
Поздравляю, вы написали клиента для чата!
Подчищаем за собой
Если вы занимались когда-либо разработкой приложений, которые активно читают/пишут в файлы, то вы должны знать, что хорошие разработчики закрывают файлы по окончании работы с ними. Дело в том, что соединение через сокет обеспечивается дескриптором файла. Это означает, что по окончании работы нужно его закрыть, как любой другой файл.
Для этого добавьте в ChatRoom.swift следующий метод после определения send(message:):
Как вы наверняка догадываетесь, этот метод закрывает потоки, так что вы больше не сможете получать и отправлять сообщения. Кроме того, потоки удаляются из цикла выполнения (run loop), в который мы ранее их помещали.
Добавьте вызов этого метода в секцию .endEncountered в операторе switch внутри stream(_:handle:):
Затем вернитесь к ChatRoomViewController.swift и сделайте то же самое во viewWillDisappear(_:):
Всё! Теперь точно всё!
Заключение
Теперь, когда вы овладели основами сетевого взаимодействия при помощи сокетов, вы можете углубить свои познания.
UDP Sockets
Это приложение — пример сетевого взаимодействия при помощи TCP, которое гарантирует доставку пакетов по назначению.
Однако можно использовать и UDP сокеты. Этот тип соединения не гарантирует доставки пакетов по назначению, однако он значительно быстрее.
Особенно полезно это в играх. Когда-нибудь испытывали лаг? Это означало, что у вас было плохое соединение и множество UDP пакетов было потеряно.
WebSockets
Другая альтернатива HTTP в приложениях — технология, называемая вебсокеты.
В отличие от обычных TCP сокетов, вебсокеты для установления взаимодействия используют HTTP. С их помощью можно достичь того же, что и с обычными сокетами, но с комфортом и безопасностью, как в браузере.
Источник