From d5d2c0633932f93442a48f2f7c7bc87ae283ef04 Mon Sep 17 00:00:00 2001 From: Shivansh Handa Date: Thu, 1 Nov 2018 08:09:36 +0530 Subject: [PATCH] add article for websocket (#19913) * add article for websocket An article on WebSocket implementation using ws module in node.js. * Update index.md --- guide/english/nodejs/websocket/index.md | 73 +++++++++++++++++++++++++ 1 file changed, 73 insertions(+) create mode 100644 guide/english/nodejs/websocket/index.md diff --git a/guide/english/nodejs/websocket/index.md b/guide/english/nodejs/websocket/index.md new file mode 100644 index 0000000000..cf9af27ec1 --- /dev/null +++ b/guide/english/nodejs/websocket/index.md @@ -0,0 +1,73 @@ +--- +title: WebSocket +--- + + +# WebSocket +[WebSocket](https://www.websocket.org) is a computer communications protocol, providing full-duplex communication channels over a single TCP connection. The +WebSocket protocol enables interaction between a web client (such as a browser) and a web server with lower overheads, +facilitating real-time data transfer from and to the server. This is made possible by providing a standardized way for the +server to send content to the client without being first requested by the client, and allowing messages to be passed back and +forth while keeping the connection open. In this way, a two-way ongoing conversation can take place between the client and the +server. + +In [HTTP](https://en.wikipedia.org/wiki/Hypertext_Transfer_Protocol), server can only respond to a request of client, it cannot send a response without client request. Although, WebSocket +and HTTP are different but WebSocket has been designed such that they both are compatible.1 + + +## WS +We will be using the [`ws`](https://www.npmjs.com/package/ws) module to implement webSocket in node.js. + +### Installing +`npm install ws -g` + +### Usage +#### Server +Lets create a server that sends a message to client when a connection is established, and logs message sent by the client. +```javascript +var WebSocketServer = require('ws').Server; +var wss = new WebSocketServer({port: 8080}); + +wss.on('connection', function(ws) { + ws.on('message', function(message) { + console.log('Message received: %s', message); + }); + ws.send('Hello from server'); +}); +``` +`new WebSocketServer({port: 8080})` starts a server on port no. 8080. Then the lines following are the callback functions. +`function(ws)` is called once a connection is established with a client. `function(message)` is called when a client sends a +message to the server. +Save the code in a file named `ws_server.js`. + +#### Client +Use the code below to connect to the server +```javascript +var WebSocket = require('ws'); +var ws = new WebSocket('ws://localhost:8080/websockets/'); + +ws.on('open', function() { + ws.send('Msg from client'); +}); +ws.on('message', function(data, flags) { + console.log('Msg received in client: %s ', data); +}); +``` +`new WebSocket('ws://localhost:8080/websockets/')` establishes a connection with the server on port 8080, that we have created +above. `ws.on('open', function() ` sends message to server when connection is established. The other function logs the message +sent by the server. +Save the code in a file as `ws_client.js`. + +Now lets run our code. Go to the directory in which you saved your file and run the following commands + +**Server:** +`$ node ws_server.js` + +**Client:** +`$ node ws_client.js` + +From the output you can see that the server starts and is ready to accept connection. When the client starts it first establishes a connection with the server, then sends a message and listens for an incoming message from server. Once the connection is established between server and client, `ws.send()` is fired and messages are exchanged between both of them, and due to the asynchronous nature of `node.js`, both of them at the same time, are listening also. + + ## Reference + - [Wiki page](https://en.wikipedia.org/wiki/WebSocket) + - [Linode guide](https://www.linode.com/docs/development/introduction-to-websockets/)