WebSocket provides fully duplex communication over single TCP connection over internet. It is designed to work over HTTP (port: 80) & HTTPS (port: 443) ports. To achieve
compatibility, the WebSocket handshake uses the HTTP upgrade header to change from the HTTP protocol to WebSocket protocol.
The WebSocket protocol enables interaction between web browser and web server. And facilitating real time data transfer from and to the server.
The WebSocket protocol defines as ws:// (WebSocket) and wss:// (WebSocket Secure connection) indicates. This sets up a tunnel, which provides low level hope to hope TCP IP communication through the HTTP port 80 and HTTPS port 443, between the websocket secure
client and the WebSocket server.
People who are new to WebSocket may ask the question why do we need WebSocket? Since we have HTTP protocol. The answer is HTTP protocol has a flaw: communication only can be initiated by the client.
The characteristic of the webscoket is in a way of request is that, it will be troublesome for the client to know if a continuous state changes has happened on the web-server. So we have use pooling. The most typical scenes are like chat room, online gaming, live streaming and etc.
NGINX can perform the load balance and distribute user sessions to multiple nodes if your application has several instances running at a time. In the http context in your NGINX configuration, include an upstream block to define the nodes in an upstream group.
Upstream node_name {
Ip_hash;
server 127.0.0.1:8080;
server 127.0.0.1:8081;
}
The upstream group of servers is declared, a virtual server needs to be configured to direct traffic to it. At min., include the “proxy_pass” directive and named as the upstream group.
Because the websocket protocol uses the upgrade header introduced in HTTP/1.1 and we include the “proxy_http_version” directive.
server {
server_name example.com;
location / {
proxy_set_header Upgrade $http_upgrade;
proxy_set_header Connection “upgrade”;
proxy_http_version 1.1;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
proxy_set_header Host $host;
proxy_pass http://node_name
}
}