In ws4py package for websockets (python) close() api is not shutting down connection

308 Views Asked by At

I am trying to write a websocket client that listens from a websocket server for some events and dumps them on screen. If the length of message exceeds 250 chars, I wan the connection to close. I have written the following code for it:

import time
from ws4py.client.threadedclient import WebSocketClient

WS_HOST='172.17.0.2:8081'
EVENTS_URL = 'ws://' + WS_HOST + '/events'
FAULTS_URL = 'ws://' + WS_HOST + '/faults'
ALARMS_URL = 'ws://' + WS_HOST + '/alarms'
ECHO_URL = 'ws://echo.websocket.org/'

class SNMPWebSocketClient(WebSocketClient):
    def opened(self):
        print 'Opened client at {0}'.format(self.url)

    def closed(self, code, reason=None):
        print "Closed down", code, reason

    def received_message(self, m):
        print m
        print 'Client={0}, server={0}'.format(self.client_terminated, self.server_terminated)
        print len(m)
        if len(m) >= 272:
            print 'Send close signal'
            self.close()
        print '\n\n'

if __name__ == '__main__':
    ws = SNMPWebSocketClient(EVENTS_URL)
    try:
        ws.connect()
        ws.run_forever()
    except KeyboardInterrupt:
        ws.close(code=1002, reason='kb yay Interrupt')
        time.sleep(1)
        print 'Kb Interrupt'

But while listening the close never goes through. The client and server flags for terminated shows 'True' but still the client keeps receiving messages. Is there something wrong in my use of close()? Or is this how the websocket client is supposed to work until it is explicitly killed?

Here is the output:

 $ python threaded_ws.py 
Opened client at ws://172.17.0.2:8081/events
{"Enable":true,"OwnerId":1,"OwnerName":"ASICD","EventName":"PortOperStateDown","Description":"Port Operational State DOWN Event","SrcObjName":"Port","EvtId":2,"TimeStamp":"2017-03-28T14:38:32.881456505Z","SrcObjKey":{"IntfRef":"eth25"},"AdditionalData":null}
Client=False, server=False
258



{"Enable":true,"OwnerId":1,"OwnerName":"ASICD","EventName":"VlanOperStateDown","Description":"Vlan Operational State DOWN Event","SrcObjName":"Vlan","EvtId":4,"TimeStamp":"2017-03-28T14:38:32.882046191Z","SrcObjKey":{"VlanId":3050},"AdditionalData":null}
Client=False, server=False
254



{"Enable":true,"OwnerId":1,"OwnerName":"ASICD","EventName":"IPv4IntfOperStateDown","Description":"IPv4 Interface Operational State DOWN Event","SrcObjName":"IPv4Intf","EvtId":6,"TimeStamp":"2017-03-28T14:38:32.883912357Z","SrcObjKey":{"IntfRef":"eth25"},"AdditionalData":null}
Client=False, server=False
276
Send close signal



{"Enable":true,"OwnerId":1,"OwnerName":"ASICD","EventName":"PortOperStateUp","Description":"Port Operational State UP Event","SrcObjName":"Port","EvtId":1,"TimeStamp":"2017-03-28T14:38:33.38139292Z","SrcObjKey":{"IntfRef":"eth25"},"AdditionalData":null}
Client=True, server=True
253



{"Enable":true,"OwnerId":1,"OwnerName":"ASICD","EventName":"VlanOperStateUp","Description":"Vlan Operational State UP Event","SrcObjName":"Vlan","EvtId":3,"TimeStamp":"2017-03-28T14:38:33.382071856Z","SrcObjKey":{"VlanId":3050},"AdditionalData":null}
Client=True, server=True
250



{"Enable":true,"OwnerId":1,"OwnerName":"ASICD","EventName":"IPv4IntfOperStateUp","Description":"IPv4 Interface Operational State UP Event","SrcObjName":"IPv4Intf","EvtId":5,"TimeStamp":"2017-03-28T14:38:33.382852609Z","SrcObjKey":{"IntfRef":"eth25"},"AdditionalData":null}
Client=True, server=True
272
Send close signal
0

There are 0 best solutions below