【问题标题】:Get client port number using tornado using WebSockets使用 WebSockets 使用龙卷风获取客户端端口号
【发布时间】:2016-02-18 20:45:21
【问题描述】:

我可以获取客户端ip:

self.request.remote_ip 

我也可以从 RequestHandler 获取客户端端口号:

self.request.connection.stream.socket.getpeername()[1]

(感谢this

但是来自 WebSocket 的客户端端口号呢?

我在文档中找不到有关如何执行此操作的任何内容。我已经仔细查看了源代码,但仍然无法弄清楚它在哪里。

【问题讨论】:

    标签: websocket tornado


    【解决方案1】:

    正如我在How to get the client port in RequestHandler? 中所说,第一个问题是你为什么要这个?

    在 websocket 处理程序中,与您在上面发布的代码等效的是 self.stream.socket.getpeername()[1]

    【讨论】:

    • 非常感谢一百万!这里的用例是多个设备连接到一个服务器。当一个新设备连接时,它被添加到一个映射中,它的 ip 地址被用作 key。如果两个设备从同一个无线网络连接,则 ip 是不够的(因为这两个设备显示为具有相同的 ip - 代理/NAT 的 IP),但是使用 ip:port 组合我们有一个唯一的地址.你会建议以不同的方式这样做吗?
    • 客户端端口不识别用户/设备,它识别连接。如果同一设备重新连接它(可能)将不再具有相同的端口。如果您想识别用户或设备,则必须使用 cookie 之类的东西。如果您只想识别连接,那么客户端 ip:port 是获取唯一标识符的一种方法,但还有很多其他方法。最简单的方法是使用self(即WebSocketHandler 实例本身)作为映射键。
    • 啊,是的,self 是一个更简洁的解决方案,谢谢。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-01-19
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2016-04-19
    相关资源
    最近更新 更多