#web-applications
#веб-приложения
Вопрос:
Сначала я опишу функциональность, которой я хочу достичь, а затем, в чем, на мой взгляд, заключаются мои технические проблемы.
Функциональность: Я хочу создать HTML / JavaScript-клиент для IGS (Internet Go Server). Это похоже на FICS (бесплатный шахматный сервер в Интернете) в том смысле, что игра осуществляется через telnet, а все графические клиенты являются просто оболочками вокруг этого исходного протокола. Моя цель — иметь возможность играть без каких-либо дополнений к веб-браузеру (без Java, Flash и т.д.).
Технические проблемы: самая большая проблема, которую я вижу, связана с сервером. Чтобы запустить игру, веб-сервер должен открыть постоянный сокет для IGS и использовать его как для отправки, так и для получения данных. (И каждому игроку потребуется новое такое подключение.) Это сильно отличается от подхода CGI, используемого в веб-разработке.
Одно из решений, о котором я подумал, заключается в том, что веб-сервер разветвляет процесс для каждого проигрывателя, который будет управлять сокетом и взаимодействовать с веб-сервером через БД. Это звучит не очень привлекательно (косвенное обращение, опрос, тьфу …). Отсюда мой вопрос: каково стандартное решение такой проблемы?
Ответ №1:
Проверьте сокет.Ввод-вывод (версия Java) для отправки сообщений между клиентом и сервером по протоколу http. Вам понадобится какая-то шина сообщений для обмена перемещениями между клиентами.
Комментарии:
1. Если я правильно понимаю, это означает, что браузер должен запускать Java? Если да, то это именно то, чего я не хочу делать.
2. Извините, нет. Сокет. Ввод-вывод может использовать различные методы и возвращаться к поддерживаемым функциям. Возможными способами переноса являются WebSocket, Adobe Flash Socket, AJAX long polling, AJAX multipart streaming, Forever Iframe, JSONP Polling. Если WebSocket или Flash не включены, должен работать длительный опрос ajax.
3. О, я перешел по всем вашим ссылкам, кроме самой важной 🙂 все-таки сокет. Ввод-вывод работает при обмене данными между браузером и веб-сервером, правильно? Я не могу просто открыть сокет для произвольного сервера (если он не поддерживает сокет. Транспортная модель ввода-вывода, которой нет в IGS). Однако, похоже, я могу отключить процессы, которые взаимодействуют с реальным сокетом, с IGS и с socket. Ввод-вывод в браузер, полностью пропуская веб-сервер (за исключением разветвления процесса). Это то, что вы имели в виду?
4. После короткого теста все работает отлично. Даже не нужно разветвлять процессы, поскольку node.js сохраняет все сокеты открытыми. Спасибо!