* add article for websocket An article on WebSocket implementation using ws module in node.js. * Update index.md
		
			
				
	
	
		
			74 lines
		
	
	
		
			3.3 KiB
		
	
	
	
		
			Markdown
		
	
	
	
	
	
			
		
		
	
	
			74 lines
		
	
	
		
			3.3 KiB
		
	
	
	
		
			Markdown
		
	
	
	
	
	
---
 | 
						|
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.<sup>1</sup>
 | 
						|
 | 
						|
 | 
						|
## 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/)
 |