【问题标题】:TCP socket + socket.io bidirectional (JSON-)RPC: dnode?TCP socket + socket.io 双向(JSON-)RPC:dnode?
【发布时间】:2011-12-25 15:19:45
【问题描述】:

我正在寻找一种在 node.js 中实现双向 RPC 的方法(意味着客户端和服务器都提供远程可调用过程,最好像 json-rpc)。它应该可以在 socket.io 和客户端的 TCP/IP 套接字之上使用。我正准备将 nowjs 用于 websocket,并为“普通”套接字提供单独的 API。

现在我刚刚发现 dnode 声称可以与两者一起使用。 “它可以在网络套接字上工作,甚至可以在带有 socket.io 的浏览器中工作。”

我需要将 JSON 对象(包含字符串)传递给对方。客户端将使用 JavaScript(浏览器)、JavaScript(Appcelerator Titanium)、C# 以及可能的 Java(Android)编写,但只有一个Java的实现。我读了protocol,我认为实现起来并不容易。

在建立连接后还有一个方法名称交换,这在我的应用程序中将是一个相当大的开销,我不需要它,因为我知道我在另一端实现了什么(它不是公共 api)。

有人对此有经验或知道替代方案吗?我不确定这是否适合我的目的,我需要实施 CRUDPUB /SUB

【问题讨论】:

  • Dnode 和 nowjs 都做方法名交换。你不只使用 socket.io 的原因是什么?
  • 我需要回答在 socket.io 中不太好的请求(发出一个新事件)。在 nowjs 你有一个很好的回调函数。 NowJS呢?不知道...

标签: node.js rpc socket.io json-rpc dnode


【解决方案1】:

使用 socket.io ,它支持 rooms 可以存储 memoryRedis 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/

【讨论】:

  • 是的,我现在正在使用 socket.io。我发现 socket.io 确实支持回调/直接答案。它隐藏在“如何使用”中。
猜你喜欢
  • 2011-11-17
  • 1970-01-01
  • 2016-04-23
  • 1970-01-01
  • 2020-02-15
  • 1970-01-01
  • 2015-04-14
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多