Python 使用ws4py套接字心跳创建CherryPy

Python 使用ws4py套接字心跳创建CherryPy,python,callback,cherrypy,ws4py,Python,Callback,Cherrypy,Ws4py,我已经花了大约5个小时寻找如何做到这一点,但没有任何结果 我们在cherrypy之上使用ws4py。目前,当连接实际丢失时(例如关闭WiFi),在服务器发送消息之前,连接不会终止,此时服务器会检测到断开的线路并清理插座 这给我们带来了问题,我们需要尽快知道套接字是否消失了 ws4py中的文件“websocket.py”有一个名为“Heartbeat”的类,它看起来正是我想要的,我相信,如果“websocket”中传入了“Heartbeat\u freq”参数,则会在其内部创建一个实例 class

我已经花了大约5个小时寻找如何做到这一点,但没有任何结果

我们在cherrypy之上使用ws4py。目前,当连接实际丢失时(例如关闭WiFi),在服务器发送消息之前,连接不会终止,此时服务器会检测到断开的线路并清理插座

这给我们带来了问题,我们需要尽快知道套接字是否消失了

ws4py中的文件“websocket.py”有一个名为“Heartbeat”的类,它看起来正是我想要的,我相信,如果“websocket”中传入了“Heartbeat\u freq”参数,则会在其内部创建一个实例

class WebSocket(object):
""" Represents a websocket endpoint and provides a high level interface to drive the endpoint. """

    def __init__(self, sock, protocols=None, extensions=None, environ=None, heartbeat_freq=None):
上面是ws4py ctor,但我找不到从何处调用此代码。我所知道的是,它被捆绑在一个CherryPy回调系统中。这是我发现的

上述ctor是从函数中的“cherrypyserver.py”调用的

def upgrade(self, protocols=None, extensions=None, version=WS_VERSION, handler_cls=WebSocket, heartbeat_freq=None):
此函数似乎是回调函数,因为它是从函数中的cprequest.py调用的

def __call__(self):
    """Run self.callback(**self.kwargs)."""
    return self.callback(**self.kwargs)
现在有更多的东西飘来飘去,但老实说,我有点迷路了,我觉得我做错了

据我所知,我需要设置回调的“heartbeat\u freq”参数,但不确定在哪里设置这个参数。下面的代码是我指定回调创建实例的“WebSocket”处理程序类(WebSocket 2.handler从“WebSocket”继承)的地方

rootmap2={
    'wsgi.pipeline': [
        ('validator1', validator),
        ('validator2', validator),
        ]   ,   
        'tools.websocket.on': True,
        'tools.websocket.handler_cls': websocket2.Handler,

    }
我相信在这个“根映射”的某个地方,我必须指定参数。有人知道怎么做吗

为了澄清这一点,我希望我的服务器为每个对等方创建一个心跳信号。我相信这是通过传递“heartbeat\u freq”值来实现的


目前,我只是向所有人广播心跳信号,我个人不喜欢这种声音

心跳信号只有在websocket对象执行其run方法时才会被激活(通常在线程中,因为它正在阻塞)。然而,由于各种原因,CherryPy插件不再使用该代码路径。我还没有决定如何处理heartbeat,因为就目前而言,它必须在每个websocket的自己的线程中运行。我发现昂贵的内存是明智的。但是,如果确实需要该功能,请使用websocket实例创建Heartbeat类的实例。只需保存对每个Heartbeat实例的引用