Непрерывная передача дерева решений: REST против websocket

#ajax #node.js #rest #websocket #tree

#ajax #node.js #rest #websocket #дерево

Вопрос:

Я работаю над веб-приложением (серверная часть написана на Node.js с mongo-db), где пользователь может принимать, документировать и описывать решения. Я представляю это в древовидной структуре следующим образом

 { 
  tree: {
    root: Node,
    nodes: [{   // keeping a reference to all nodes of the tree
      index: Number,
      node: Node
    }],
    lastIndex: Number
  }
}
  

Где узел

 {
  parent: Node,
  children: [Node],
  data: {
    d1: String,
    d2: [String],
    d3: Number,
    d4: Boolean
    // more data fields as above, probably not more than 10-20 fields per node
  },
  index: Number   // this node's index in the tree's node map
}
  

В веб-приложении (т. Е. в браузере) пользователь может выполнять следующие действия:

  • Создайте новое дерево
  • Добавление узла в дерево
  • Редактирование данных узла
  • Удалить полное поддерево
  • Измените порядок дочерних элементов узла
  • Загрузить полное дерево

Основным действием будет добавление новых узлов и их описание (заполнение полей данных). В основном это можно сделать с помощью мыши, поэтому, если пользователь быстро нажимает, он может создавать до 5-10 узлов в секунду.

Я хочу отправить эти изменения в режиме реального времени на сервер и сохранить их в базе данных (mongo-db). (Также я подумываю о том, чтобы показать обратную связь на странице, что текущее состояние сохраняется на сервере, но я думаю, что это произойдет позже).

Итак, все сводится к следующим требованиям:

  • Большую часть времени я буду иметь дело с действиями по созданию и обновлению в таблице узлов (возможно, много созданий / обновлений на пользователя в секунду).
  • Не будет много данных, отправляемых с сервера клиенту (за исключением случаев, когда загружается новое дерево).

Итак, в моем случае лучше использовать вызовы REST или соединение с websocket?

Любая помощь действительно ценится!

Комментарии:

1. Возможно, это зависит от того, хотите ли вы полностью асинхронную связь между клиентом и сервером, которую вам предоставят веб-сокеты, но вам нужно добавить сервер websocket.

2. @Berniev Чем асинхронность websockets отличается от ajax? Каковы были бы преимущества в моем сценарии? И не является ли сервер websocket просто еще одним маршрутом, который я объявляю в node.js ?

3. С помощью websockets клиент или сервер могут отправлять в любое время

4. Мне нужно только, чтобы клиент отправлял данные, поэтому нет никакой пользы в переходе на websockets? Разве это не быстрее? В одном дереве может быть несколько сообщений / обновлений от одного и того же пользователя в секунду.