Мне нужно использовать NGINX в качестве прокси-сервера WebSocket, и я смог запустить этот учебник без каких-либо проблем. В этом случае простое приложение WebSocket выполняется с использованием ws и Node.js. Однако мне нужно подставить код в javascript (server.js) с помощью приложения, разработанного на C.
Для этого я попытался использовать последний пример, показанный в этом уроке, который очень прост и понятен.
Однако, используя тот же порт и конфигурацию, что и в server.js, при запуске скомпилированного кода C кажется, что связь не установлена должным образом. В этом случае, когда я запускаю wscat в клиентском терминале, кажется, что он чего-то ждет, потому что слово "подключено" никогда не увидено, но связь еще не закончена (вот почему я говорю, что кажется, что он чего-то ждет, в других случаях, если я пытаюсь использовать другой порт, например, связь закрывается и появляется предложение как "ошибка: неожиданный ответ сервера").
С другой стороны, на стороне сервера я вижу, что есть новое соединение. Я подозреваю, что ответ с сервера не поступает на клиента, но я не знаю почему. Nginx правильно настроен, так как пример, выполняемый в javascript, работает правильно, и я использую те же порты как в javascript, так и в C (в server.js у меня есть: wss = new WebSocketServer ({port: 8010}); server.c: 'server.sin_port = htons (8010);' с моей точки зрения он должен работать...)
Я пробовал с другими примерами в C с аналогичным поведением. Кто-нибудь знает, что может быть причиной этого? Вы рекомендуете другие специальные коды C для серверов WebSocket?
Ваша проблема в том, что существует очень заметное различие между websockets и сокетами. Сокеты - это сетевые интерфейсы более низкого уровня, тогда как веб-серверы работают на каком-то веб-сервере.
Я бы рекомендовал использовать библиотеку websocket для C. :) Вот что я нашел после быстрого поиска в Google. Документацию для указанной библиотеки можно найти здесь.
Ответ, данный @MustacheMoses, очень близок (я поддерживаю) - там огромная разница между сокетами и веб-сокетами.
Websockets - это протокол, начинающийся с запроса HTTP "обновления" и продолжающийся с помощью протокола мультиплексирования обмена сообщениями с использованием конкретной схемы упаковки данных.
Сокеты относятся к каналам связи нижнего уровня (т.е. Потоковым сокетам, таким как сокеты TCP/IP или Unix Sockets или даже Raw Sockets).
Я также хотел бы отметить, что, подобно node.js, библиотеки и серверы websocket в C поступают в разные вкусы.
Некоторые библиотеки обеспечивают почти веб-рамочный подход (например, kore.io или мою собственную инфраструктуру facil.io), а другие более узкие.
Подобно узлам/серверам node.js (которые часто пишутся на C или C++), все они отличаются производительностью и функциями (я бы проверил это, прежде чем я перейду к конкретному подходу).
Как справедливо указал @tadman, лучше было бы придерживаться существующей базы кода и добавлять любые библиотеки C, которые вам нужны, используя FFI.
Это несколько редко для высокоуровневых сервисов, таких как веб-приложения, для создания с использованием языка более низкого уровня.
Обратное также верно, часто менее желательно создавать веб-сервер нижнего уровня с использованием языка более высокого уровня.
Это только мое скромное мнение, но считаю, что я пишу это, даже если я являюсь автором рамок приложений websocket, написанных на C. Когда придет время написать фактическое приложение Websocket для производства, я часто предпочитаю использовать facil. io как расширение Ruby C и написать приложение в Ruby (если Ruby недоступен).