From dc8efe511a203ce4df7f2bfafd1df36c8a2f2760 Mon Sep 17 00:00:00 2001 From: sairajzero Date: Mon, 16 Sep 2019 17:08:59 +0530 Subject: [PATCH] Directly unicast/broadcast the incoming websocket messages Directly send the incoming websocket messages through unicast or broadcast Incoming messages for unicast and broadcast are not processed inside the server Server response speed is increased as duplicating the message is eliminated Websocket message limit of 5000 is eliminated since the message is directly sent --- app/websocket_chat | Bin 172272 -> 172248 bytes util/websocket_chat.c | 14 +++----------- 2 files changed, 3 insertions(+), 11 deletions(-) diff --git a/app/websocket_chat b/app/websocket_chat index 9911f0d48248dd5fc47b8cdacca44dccbe3b6016..c7b85dfade7577633be65029dafbb32ab9c30002 100755 GIT binary patch delta 39887 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, NULL); c != NULL; c = mg_next(nc->mgr, c)) { if (c == nc) continue; /* Don't send to the sender. */ - mg_send_websocket_frame(c, WEBSOCKET_OP_TEXT, buf, strlen(buf)); + mg_send_websocket_frame(c, WEBSOCKET_OP_TEXT, msg.p, msg.len); } } static void unicast(struct mg_connection *nc,const struct mg_str msg) { - char buf[5000]; - - snprintf(buf, sizeof(buf), "%.*s", (int) msg.len, msg.p); - printf("%s\n", buf); /* Local echo. */ if(nc != NULL) - mg_send_websocket_frame(nc, WEBSOCKET_OP_TEXT, buf, strlen(buf)); + mg_send_websocket_frame(nc, WEBSOCKET_OP_TEXT, msg.p, msg.len); else printf("No selfClient is connected!\n"); @@ -115,7 +107,7 @@ int main(int argc, char** argv) { nc = mg_bind(&mgr, s_http_port, ev_handler); mg_set_protocol_http_websocket(nc); - s_http_server_opts.document_root = "app"; // Serve current directory + s_http_server_opts.document_root = "."; // Serve current directory s_http_server_opts.enable_directory_listing = "no"; printf("Started on port %s\n", s_http_port);