标签: rpc

REST Web服务与类似RPC的服务有何区别?

我有一个使用AJAX从服务器获取JSON数据的Web应用程序.它要求用户首先使用浏览器登录,以便设置cookie.仅使用GETPOST谓词,其中GET用于检索数据,POST用于修改数据的任何操作.

据我所知,REST与上述方法的不同之处在于,每次请求都会发送用户认证信息,PUT并且DELETE也会使用和动词.

我的问题是,如果终点只是用户的浏览器,那么REST Web服务对类似RPC的方法有什么好处?我可以理解当客户端未知时REST是如何有益的,但是当我只使用jQuery ajax调用时,与类似RPC的方法相比,它的好处还是值得吗?

ajax rest jquery rpc json

28
推荐指数
2
解决办法
1万
查看次数

用于iOS/Android应用程序通信的基于TCP的RPC服务器(Erlang或类似的东西?)

我正在iOS和Android中构建本机移动应用程序.这些应用程序需要与服务器进行"实时"更新,与任何其他基于网络的应用程序相同(Facebook,Twitter,社交游戏,如Words with Friends等)

我认为使用HTTP长轮询是因为长轮询可能对电池寿命有害,尤其是在大量TCP设置/拆除时.让移动应用程序使用持久性TCP套接字建立与服务器的连接,并将RPC样式命令发送到服务器以进行所有Web服务通信可能是有意义的.当然,这需要服务器处理长期存在的TCP连接,并且一旦理解了传递到TCP管道的数据,就能够与Web服务通信.我正在考虑使用JSON或XML以纯文本格式传递数据.

也许基于Erlang的RPC服务器可以很好地用于这样的基于网络的应用程序.它允许移动应用程序通过一个连接从服务器发送和接收数据,而无需多个设置/拆卸,单个HTTP请求将使用类似iOS上的NSURLConnection.由于不涉及Web浏览器,我们不需要在移动客户端级别处理HTTP的细微差别.很多这些"COMET"和长轮询/流媒体服务器都是基于HTTP构建的.我认为只使用TCP上的纯文本协议就足够了,可以使客户端响应更快,允许从服务器接收更新,并通过传统的长轮询和流模型保持电池寿命.

目前是否有人使用其原生iOS或Android应用程序执行此操作?您是否编写了自己的服务器,或者是否有一些开源的东西,我今天可以开始使用而不是重新发明轮子?有没有理由为什么只使用基于TCP的RPC服务比使用HTTP更糟糕?

我还研究了HTTP流水线技术,但在客户端实现它时,它看起来并不值得.此外,我不确定它是否允许在客户端< - >服务器通信通道中进行双向通信.

任何见解将不胜感激.

erlang android rpc tcp ios

26
推荐指数
1
解决办法
5298
查看次数

如何在Protobuf服务rpc中返回一个数组

我的.proto文件中有以下架构:

service MyService {
    rpc GetItem (ItemQuery) returns (Item) {
    }
}

message ItemQuery {
    int id = 1;
}
message Item {
    int id = 1;
    string name = 2;
}
Run Code Online (Sandbox Code Playgroud)

现在我想添加另一个rpc方法来返回多个Items.像这样的东西:

rpc GetItems (ItemsQuery) returns (repeated Item) {
}
Run Code Online (Sandbox Code Playgroud)

有没有比定义Items消息更好的方法呢?

rpc protocol-buffers

26
推荐指数
1
解决办法
1万
查看次数

为什么NFS默认使用UDP?

我确信它有一些古老的遗产原因,但它是什么?它似乎是一种面向可靠数据传输的服务.

unix networking rpc nfs

25
推荐指数
3
解决办法
3万
查看次数

Interface Builder和Xcode集成无法正常工作

安装iPhone SDK 3.1.2后,Interface Builder不再与Xcode同步.XIB窗口底部的指示灯为灰色.IB没有看到Xcode项目中的任何文件.当我开始IB时,Xcode总是打开的.

我试过重启.没运气.
我尝试删除Xcode/IB的首选项文件.没运气.
我尝试重新安装Xcode/IB.仍然没有运气.

本页介绍IB如何监控Xcode中的更改.虽然这是一个有趣的阅读,但它没有提供任何有关如何调查我的问题的帮助.

任何帮助,将不胜感激.

编辑
这里有更多信息.我为launchd启用了调试日志,我注意到每次启动Interface Builder时都会出现以下行:

[0x0-0x1b01b].com.apple.InterfaceBuilder3[315]: Couldn't open shared capabilities memory GSCapabilities (No such file or directory)
Run Code Online (Sandbox Code Playgroud)

这似乎与我的问题有关.

xcode rpc interface-builder

22
推荐指数
1
解决办法
1万
查看次数

从GWT应用程序中执行RPC时出现SerializationPolicy错误

我收到以下异常:

com.google.gwt.user.client.rpc.SerializationException:类型'java.lang.Long'未包含在可由此SerializationPolicy序列化的类型集中,或者无法加载其Class对象.出于安全考虑,此类型不会被序列化

使用GWT 2.1和内置的Jetty服务器.根据文档,这种类型绝对是可序列化的...如何将它包含在SerializationPolicy中?

java gwt serialization rpc gwt-rpc

22
推荐指数
3
解决办法
2万
查看次数

什么是一个很好的基于Java的主从通信机制?

我正在创建一个Java应用程序,它需要JVM之间的主从通信,可能驻留在同一台物理机器上.将在Java EE应用程序服务器(即JBoss)内部运行一个"主"服务器,该服务器将"从"客户端连接到它并动态注册自己进行通信(即主服务器将不知道该服务器的IP地址/端口奴隶因此无法提前配置).主服务器充当控制器,它将向从站执行工作,并且从站将定期响应通知,因此将进行双向通信.

我最初想的是基于RPC的系统,其中每一方都是服务器,但它可能变得复杂,所以我更喜欢一种机制,其中有一个打开的套接字,它们来回交谈.

我正在寻找一种低延迟的通信机制,其中消息主要是原始类型,因此不需要严格的序列化.这是我看过的:

  • RMI
  • JMS:内置于Java,"从"客户端将连接到应用程序服务器中的现有ConnectionFactory.
  • JAX-WS/RS:主服务器和从服务器都是暴露RPC接口以进行双向通信的服务器.
  • JGroups/Hazelcast:使用共享的分布式数据结构来促进沟通.
  • Memcached/MongoDB:使用这些作为"队列"来促进通信,虽然客户端必须轮询,因此会有一些延迟.
  • Thrift:这似乎保持持久连接,但不确定如何将Thrift服务器集成/嵌入JBoss
  • WebSocket/Raw Socket:这可以工作,但需要比我想要的更多自定义代码.

有没有我缺少的技术?

编辑:还看了看:

  • JMX:让客户端连接到JBoss的JMX服务器并接收双向通信的JMX通知.

java rpc jms rmi master-slave

20
推荐指数
2
解决办法
5870
查看次数

ZeroMQ工作人员应该如何安全"挂断"?

我本周开始使用ZeroMQ,当使用请求 - 响应模式时,我不确定如何让工作人员安全地"挂断"并关闭他的套接字而不可能丢弃消息并导致发送该消息的客户永远不会得到响应.想象一下用Python编写的工人看起来像这样:

import zmq
c = zmq.Context()
s = c.socket(zmq.REP)
s.connect('tcp://127.0.0.1:9999')
while i in range(8):
    s.recv()
    s.send('reply')
s.close()
Run Code Online (Sandbox Code Playgroud)

我一直在做实验,并且发现一个127.0.0.1:9999套接字类型的客户zmq.REQ做出一个公平排队的请求可能会让公司排队算法在工人完成最后一次工作之后send()但在工作之前就选择上面的工作人员.以下close()方法.在这种情况下,似乎请求由工作进程中的ØMQ堆栈接收和缓冲,并且当close()抛出与套接字关联的所有内容时请求将丢失.

工人如何"安全"分离 - 有没有办法发出"我不再需要消息"的信号,然后(a)循环传输信号期间到达的任何最终消息,(b)生成他们的回复,然后(c)执行close()保证不丢弃任何消息?

编辑:我想我想要输入的原始状态是"半封闭"状态,没有进一步的请求可以接收 - 并且发送者会知道 - 但返回路径仍然打开,以便我可以检查我的传入缓冲区是一个最后到达的消息,如果有一个坐在缓冲区中则响应它.

编辑:在回答一个好问题时,更正了描述以使等待消息的数量为多个,因为可能有许多连接在等待回复.

python concurrency rpc message-queue zeromq

20
推荐指数
1
解决办法
7724
查看次数

19
推荐指数
2
解决办法
2万
查看次数

尝试运行简单的RPC程序时出错

我正在尝试运行一个使用rpcgen创建的简单RPC程序.这是一个简单的因子计划.这是我的第一个RPC程序.make工作正常.还创建了可执行文件.但是在尝试运行可执行文件时,我收到此错误:

$sudo ./fact_server 
Cannot register service: RPC: Unable to receive; errno = Connection refused
unable to register (FACTPROGRAM, FACTVERSION, udp).
Run Code Online (Sandbox Code Playgroud)

我尝试在具有相同操作系统(ubuntu)的另一台PC上运行相同的程序.它在那里运行完美.

c ubuntu rpc

19
推荐指数
3
解决办法
2万
查看次数