lce的回调实现(Bidirectional Connections)双向通信[通俗易懂]

lce的回调实现(Bidirectional Connections)双向通信[通俗易懂]1、需求使用ice进行client和server之间的通信,请求(request)往往是单向的,即client请求server

在实际的过程中,ICE客户端跟服务端的数据流动是单项的,也就是客户端获取服务端的一个代理,从而与服务端进行数据交互,如果服务端要主动给客户端数据的时候,则需要我们给服务端传去一个客户端的代理。这时客户端也是一个服务器。在ICE中客户端、服务端没有严格的限制。
为了实现回调,同时又要使得客户端和服务端有严格的限制,ICE主要提供了三种方法
(1)客户端通过server端接口传送个server回调的proxy.这种情况适合服务器、客户端在如下的环境。客户和服务器程序或者运行在同一个主机上,或者运行在没有网络限制的多个主机上。这样的环境下,提供回调是最简单的。
(2)使用Glacier2 router,自己未接触过。
(3)由于第一种方法,有时候在网络复杂的情况,传送回调代理的时候会出现失败,因此下面主要介绍Bidirectional Connections双向通信方法。

1、需求

使用ice 进行client和server之间的通信,请求(request)往往是单向的,即client请求server。然而这种情况有时候不能满足我们的项目设计需求,需要server向客户端进行回调。这种情况下server端通常向client建立一个新的链接。如下图所示:

这里写图片描述

不幸运的是,有时候收到网络限制,客户端与服务端之间间隔这防火墙,防火墙阻止服务端向客户端主动建立连接,如下图:

这里写图片描述
这种情况下,防火墙阻止了服务端发起的任何链接。
面对这种情况,ICE提供的双向连接提供了一种解决办法,服务端的回调请求和客户端的request都可以通过一条双向通信的链接。也就是服务端的回调请求可以通过客户端已经存在的链接传输。
有两种方法来使用Bidirectional Connections。第一种方法,使用Glacier2 router, 在这种方式下,自动使用Bidirectional Connections,如果不想使用glacier2提供的这功能,可以使用第二钟方法;第二种,通过代码形式人工配置Bidirectional Connections。
声明—-我没使用过第一种方法,也不知道具体的意思,好囧(哈哈),最近在看代码,下面主要介绍第二种方法。

2、配置client端,进行Bidirectional Connections
为了配置Bidirectional Connections,需要在客户端配置如下几步:
(1)创建一个object adapter,来接收服务端的回调请求,这个adapter不需要名称或者endpoints,他的作用仅仅是接收服务端的回调请求
(2)使用这个adapter注册一个回调对象(object)
(3)激活这个object adapter
(4)在client向server端已经建立的代理(proxy)上调用ice_getConnection()函数,这样获得一个连接对象(connection object)
(5)在connection object 上调用setAdapter(adapter),传递第一步创建的adapter。这样将adapter和connection联系起来,server端就可以进行回调请求。
(6)传输回调对象的identity给server
下面是代码示例(python版):

class Client(Ice.Application):
    def run(self, args):
        if len(args) > 1:
            print(self.appName() + ": too many arguments")
            return 1

        server = Demo.CallbackSenderPrx.checkedCast(self.communicator().propertyToProxy('CallbackSender.Proxy'))
        if not server:
            print(self.appName() + 

今天的文章lce的回调实现(Bidirectional Connections)双向通信[通俗易懂]分享到此就结束了,感谢您的阅读。

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 举报,一经查实,本站将立刻删除。
如需转载请保留出处:https://bianchenghao.cn/89060.html

(0)
编程小号编程小号

相关推荐

发表回复

您的电子邮箱地址不会被公开。 必填项已用 * 标注