Есть концепция, может быть, взломать, что я беспокоюсь о себе долгое время. То, что я думал, это то, что по сути, TCP-сокет является переменной. Он содержит некоторую информацию о вашей цели, которая представлена определенными байтами в памяти вашей программы. А также байты могут быть отправлены на другие компьютеры через Интернет.
Эта концепция должна позволять общему серверу устанавливать прямое соединение между двумя частными компьютерами (с брандмауэром или за маршрутизатором). Погуляв некоторое время, я обнаружил, что эта концепция действительно существует и называется Перфорация.
Это действительно отличается от прокси. Посмотрите — это типичное соединение прокси / реле:
Данные проходят через публичный сервер. Зеленые кружки обозначают сокетные соединения между устройствами, синяя линия — поток данных.
Теперь, что сервер отправляет сокет A на устройство B и наоборот?
Внезапно оба устройства имеют «адрес» друг друга и могут отправлять друг другу любую информацию:
Мой вопрос: позволяет ли скрипт PHP получать информацию, необходимую для обмена информацией о сокетах? Как предотвратить прерывание сокета после 30-секундного ограничения времени PHP?
Этот вопрос меня немного смущает. Вы не упомянули какие-либо подробности о клиентах в схеме и о целях установления связи между ними. Если вы думаете об этом с точки зрения установления прямой связи между двумя HTTP-клиентами, то то, что вы предлагаете, невозможно, так как клиентское программное обеспечение должно быть специально разработано, чтобы облегчить это. Более того, HTTP-клиент не может выступать в роли сервера.
Я не согласен с тем, что полезно рассматривать сетевое соединение как переменную или даже структуру состояния. Хотя это в определенной степени верно, полное состояние сетевого соединения обычно хранится во многих местах:
Пробивание отверстий в основном сводится к обману маршрутизаторов NAT для установки правильных записей в их таблицах состояний. Точный способ сделать это зависит от используемого протокола уровня 4. Схемы в вашем вопросе показывают типичный поток пробивки UDP, который требует общедоступного сервера. В случае TCP, который может быть тем, что вас действительно интересует, сервер не обязательно должен начинаться с.
Других решений пока нет …