Node.js WebSocket основы

Герасим Герасимов

Здравствуйте!
Помогите пожалуйста разобраться. Есть классический пример использования WebSocket, описанный в литературе, например тут:
[https://learn.javascript.ru/websockets] и он отличается от столь же классического создания HTTP сервера, использованием new при создании сервера, вот это** new** меня и смущает.
с серверной стороны приведен такой код:

var WebSocketServer = new require('ws');
var clients = {};// подключенные клиенты

// WebSocket-сервер на порту 8081
var webSocketServer = new WebSocketServer.Server({port: 8081});
  webSocketServer.on('connection', function(ws) {
    var id = Math.random();
    clients[id] = ws;
    console.log("новое соединение " + id);
ws.on('message', function(message) {
   console.log('получено сообщение ' + message);
   for (var key in clients) {
   clients[key].send(message);
}

});
```
ws.on('close', function() {
console.log('соединение закрыто ' + id);
delete clients[id];
});

});
```
Теперь вопросы:
1) var WebSocketServer = new require('ws'); ? а не var WebSocketServer = require('ws'); в чём тут резон использовать new ? то что таких объектов может быть несколько?
2) var webSocketServer = new WebSocketServer.Server({port: 8081});
это создание экземпляра сервера? new потому что сервер создаётся под каждого клиента?
3) var id = Math.random();
clients[id] = ws;
есть варианции на тему создания id. действительно надо хранить уникальный id для каждого клиента?
4) for (var key in clients) {
clients[key].send(message);
мне как сильно бегинеру, переведите на русский ;-) как работает этот код? откуда взялся key? для чего он нужен?

С уважением, Ваш ЧЧ!

1 чел.