Сокет TCP + socket.io двунаправленный (JSON-)RPC: dnode?

Я ищу способ реализовать двунаправленный RPC в node.js (это означает, что и клиент, и сервер предоставляют процедуры с удаленным вызовом, предпочтительно такие, как json-rpc). Его можно использовать поверх сокетов socket.io и TCP/IP для клиентов. Я собирался использовать nowjs для веб-сокетов и предоставить отдельный API для "обычных" сокетов.

Теперь я только что нашел dnode, который утверждает, что работает с обоими. «Он работает через сетевые сокеты и даже в браузере с socket.io».

Мне нужно передать объекты JSON (содержащие строки) друг другу. Клиенты будут написаны на JavaScript (браузер), JavaScript (Appcelerator Titanium), C# и, возможно, на Java (Android), но есть только реализация для Java. Я прочитал протокол и думаю, что это не так просто реализовать.

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

Кто-то имеет опыт работы с ним или знает альтернативы? Я не уверен, подходит ли это для моей цели, мне нужно внедрить CRUD и PUB/SUB< /сильный>.


person Eliasdx    schedule 09.11.2011    source источник
comment
Dnode и nowjs обмениваются именами методов. По какой причине вы не просто используете socket.io?   -  person thejh    schedule 10.11.2011
comment
Мне нужно ответить на запрос, который не так хорош в socket.io (генерировать новое событие). В nowjs у вас есть хорошая функция обратного вызова. Теперь JS делает? Не знал...   -  person Eliasdx    schedule 10.11.2011


Ответы (1)


Используйте socket.io , он поддерживает комнаты, которые могут храниться в памяти или реализации Redis Pub/Sub. . Вы также можете использовать пространство имен для своих сокетов и предоставлять CRUD через события.

var io = require('socket.io').listen(80);

var someResource = io
  .of('/someResource')
  .on('create', function (socket) {
    createSomeResource()
  })
  .on('read', function(socket) {
    readSomeResource(id, function(){
      io.sockets.in('roomBasedOnSessionId').emit('data', {my:'json'})
    })
  })

Вот отличное пошаговое руководство по некоторым темам, которые вам понадобятся, включая ссылки на сокеты и совместное использование сеансов. http://www.danielbaulig.de/socket-ioexpress/

person Chris Biscardi    schedule 14.11.2011
comment
Да, сейчас я использую socket.io. Я узнал, что socket.io поддерживает обратные вызовы/прямые ответы. Это скрыто в том, как использовать. - person Eliasdx; 15.11.2011