Как вы принимаете соединение websocket с libwebsockets?
Все примеры, найденные в warmcat / libwebsockets, посвящены принятию http-запросов и обслуживанию веб-страниц / файлов. Я пытаюсь установить соединение через веб-сокет, например: ws://123.0.0.1/blah
однако он никогда не установит соединение должным образом.
я использую curl
попытаться связаться с моим сервером веб-сокетов:
curl -i -N -H "Connection: Upgrade" -H "Upgrade: websocket" -H "Host: 123.0.0.1" -H "Origin: http://123.0.0.1" http://123.0.0.1
[ DEBUG] Reason 17
[ DEBUG] Reason 29
[ DEBUG] Reason 35
[ DEBUG] Reason 32
[ DEBUG] Reason 36
[ DEBUG] Reason 19
[ DEBUG] Reason 34
[ DEBUG] Reason 20
[ DEBUG] Reason 35
[ DEBUG] Reason 34
[ DEBUG] Reason 36
curl: (52) Empty reply from server
На моем сервере я не делаю ничего особенного, просто пытаюсь распечатать поток.
enum supported_protocols {
PROTOCOL_HTTP = 0,
PROTOCOL_COUNT
};
static struct lws_protocols protocols[] =
{
{
"PROTOCOL_HTTP",
my_callback,
0,
4096,
},
{ NULL, NULL, 0, 0 } /* terminator */
};
static void
request_polling_cb (EV_P_ ev_timer *w, int revents)
{
lws_callback_on_writable_all_protocol(context,
&protocols[PROTOCOL_HTTP]);
}
static int
my_callback(struct lws *wsi,
enum lws_callback_reasons reason,
void *user, void *in, size_t len)
{
int ret = 0;
switch(reason) {
case LWS_CALLBACK_ESTABLISHED:
DBG("ESTABLISHED (%d)\n", reason);
break;
case LWS_CALLBACK_SERVER_WRITEABLE:
DBG("SERVER_WRITEABLE (%d)\n", reason);
break;
case LWS_CALLBACK_HTTP:
DBG("LWS_CALLBACK_HTTP\n");
break;
case LWS_CALLBACK_CLOSED:
DBG("LWS_CALLBACK_CLOSED\n");
break;
default:
DBG("Reason %d\n", reason);
break;
}
return ret;
}
В моем main()
, Я бегу libev
опрашивать:
ev_timer_init(t, request_polling_cb, 1, 1);
Обновление:
Я также попробовал другой curl
команда вроде так:
curl -i -N -H "Connection: Upgrade" -H "Upgrade: websocket" -H "Host: localhost" -H "Origin: http://localhost" -H "Sec-WebSocket-Key: SGVsbG8sIHdvcmxkIQ==" -H "Sec-WebSocket-Versi on: 13" http://localhost:7681
И я вижу это:
HTTP/1.1 101 Switching Protocols
Upgrade: WebSocket
Connection: Upgrade
Sec-WebSocket-Accept: qGEgH3En71di5rrssAZTmtRTyFk=
^C[2018/03/21 09:58:15:3809] NOTICE: lws_service_fd_tsi: zero length read
Это ожидаемое поведение?