通过UDP的RPC

storjrpcudp的Python项目详细描述


#RPC UDP:[RPC](http://en.wikipedia.org/wiki/Remote_procedure_call)over[UDP](http://en.wikipedia.org/wiki/User_Datagram_Protocol)in Python

RPC over UDP似乎是一个愚蠢的想法,但是像[DHT]这样的东西(http://en.wikipedia.org/wiki/Distributed_hash_table)[Kademlia](http://en.wikipedia.org/wiki/Kademlia)需要它此项目专门为异步[python twisted](http://twistedmatrix.com)代码设计,用于接受和发送远程过程调用。

这在库中不被视为异常状态,但您将知道服务器是否在可配置的时间内未收到响应。

让我们创建一个接受远程过程调用并启动它的服务器。

``python
from rpcudp.protocol import rpcprotocol
from twisted.internet import reactor

名称:
#这也可能返回延迟的发送方是(IP,端口)
返回“您好,您住在%s:%i”%(名称,发送方[0],发送方[1])

请注意,我们也需要为客户端指定一个端口,因为它需要监听对udp端口上的rpc调用的响应。

``python
from rpcudp.protocol import rpcprotocol
from twisted.internet import reactor

class rpc client(rpcprotocol):
def handleresult(self,result):
-第一个参数是一个布尔值,指示是否接收到响应
,第二个参数是接收到响应的响应。
如果结果[0]:
打印“成功!%s“%result[1]
否则:
打印“未收到响应”。


client=rpcclient()
reactor.listenudp(5678,client)
client.sayhi(('127.0.0.1',1234),“snake plissken”).addcallback(client.handleresult)
reactor.run()
````


您可以在根文件夹中的example.py文件中运行此示例。


python对象使用[msgpack]序列化(http://msgpack.org/)。所有调用都必须在8K内(通常小到可以容纳一个数据报数据包)。

在版本2.0中,进行远程调用时的方法名始终打包为Unicode字符串。在以前的版本中,方法名的字符串类型取决于python版本。为了使在python 2和python 3上运行的实例彼此兼容,方法名在打包之前现在被编码为unicode字符串,这确保了[u-msgpack-python](https://github.com/vsergeev/u-msgpack-python)总是以相同的方式打包。有关详细信息,请参阅[u-msgpack-python behavior notes](https://github.com/vsergeev/u-msgpack-python behavior notes)。

欢迎加入QQ群-->: 979659372 Python中文网_新手群

推荐PyPI第三方库


热门话题
java在返回类类型时取消选中转换   java使用JSR303和spring的验证器的组合为spring引导端点实现自定义验证逻辑   java如何使用struts2预填充复选框列表   参数数目可变的java重写方法   java这种情况下正确的日期格式是什么?   java使用带有@RequestParam的springboot内部@Controller来提供搜索方法   室内导航和路径发现中的java图遍历和过滤   java在素数面中的另一个bean中获取bean值   java在发送电子邮件时更改文本(字符串)的颜色   在Java中使用Android文本视图时出错   java Resteasy javax如何将contenttype*/*映射到服务器端的application/json?   java如何使用ApacheShiro在会话过期时重新登录?   java是否有正当理由隐藏静态方法?   java如何在javax中覆盖/插入自定义文本。打印文档(pdf、doc、docx…)?