python-在ApplicationSession的注册终结点内访问RPC调用者的IP和HTTP连接头
内容导读
互联网集市收集整理的这篇技术教程文章主要介绍了python-在ApplicationSession的注册终结点内访问RPC调用者的IP和HTTP连接头,小编现在分享给大家,供广大互联网技能从业者学习和参考。文章包含2222字,纯文字阅读大概需要4分钟。
内容图文
![python-在ApplicationSession的注册终结点内访问RPC调用者的IP和HTTP连接头](/upload/InfoBanner/zyjiaocheng/661/b60d7e78291243f58960733353904cb1.jpg)
我正在将Autobahn 0.9.2与带有asyncio的Python 3.4配合使用.
问题:使用WAMP,是否可以从RPC端点内部访问充当调用方IP和HTTP连接头的对等方?建立连接后,此信息是否保留?如果没有,我将如何开始扩展一些工厂来支持这一点?
我的目标很简单:我想拥有一个RPC端点,以对连接的对等方(呼叫方)的IP进行地理定位,并将增强后的数据中继到Redis.我已经阅读了源代码,并知道信息从何处传递(autobahn.websocket.protocol.WebSocketServerProtocol-> onConnect(request)),但是从onJoin回调中定义的ApplicationSession RPC终结点向下钻取信息时遇到了麻烦.我尝试遍历传输/路由器/路由器会话链,但没有设法到达那里.我对初始连接请求中的Peer的IP和HTTP标头都感兴趣.
这是蒸馏后的成分:
class IncomingComponent(ApplicationSession):
def __init__(self, **params):
super().__init__()
self.redis = StrictRedis(host=config["redis"]["host"], port=config["redis"]["port"], db=config["redis"]["databases"]["ailytics"])
def onConnect(self):
self.join("abc")
@asyncio.coroutine
def onJoin(self, details):
def geolocalize_and_store_event(event, detail):
# Geolocalize here! Have access to caller ID through detail
self.redis.rpush("abc:events", json.dumps(event))
yield from self.register(
geolocalize_and_store_event,
"abc.geolocalize_and_store_event",
options=RegisterOptions(details_arg='detail', discloseCaller = True)
)
并初始化服务器:
router_factory = wamp.RouterFactory()
session_factory = wamp.RouterSessionFactory(router_factory)
session_factory.add(IncomingComponent())
transport_factory = websocket.WampWebSocketServerFactory(session_factory, debug=False, debug_wamp=False)
loop = asyncio.get_event_loop()
coro = loop.create_server(transport_factory, '0.0.0.0', 7788)
server = loop.run_until_complete(coro)
try:
loop.run_forever()
except KeyboardInterrupt:
pass
finally:
server.close()
loop.close()
解决方法:
您至少可以通过crossbar.io中的wamp.session.get meta-API访问额外的会话/传输信息:
@inlineCallbacks
def onJoin(self, ign):
@inlineCallbacks
def method(details):
session = yield self.call('wamp.session.get', details.caller)
peer = session['transport']['peer']
print "peer's address", peer
headers = session['transport']['http_headers_received']
print "headers:"
print '\n'.join(['{}: {}'.format(k, v) for (k, v) in headers.items()])
yield self.register(
method, 'some_method',
types.RegisterOptions(details_arg='details'),
)
内容总结
以上是互联网集市为您收集整理的python-在ApplicationSession的注册终结点内访问RPC调用者的IP和HTTP连接头全部内容,希望文章能够帮你解决python-在ApplicationSession的注册终结点内访问RPC调用者的IP和HTTP连接头所遇到的程序开发问题。 如果觉得互联网集市技术教程内容还不错,欢迎将互联网集市网站推荐给程序员好友。
内容备注
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 gblab@vip.qq.com 举报,一经查实,本站将立刻删除。
内容手机端
扫描二维码推送至手机访问。