2016-02-11 41 views
0

我想用jsocket在Python中編寫一個JSocket服務器。我使用了jsocket中的示例代碼並對其進行了修改,以便服務器在收到來自客戶端的消息後儘快回覆。當我的客戶端嘗試在「client.read_obj()」中收到響應時,出現異常。我的代碼和下面的堆棧跟蹤:python jsocket RuntimeError

#!/usr/bin/python 

    import jsocket 
    import logging 

    logger = logging.getLogger("jsocket.testJSocket") 

    class MyFactoryThread(jsocket.ServerFactoryThread): 
     def __init__(self): 
      super(MyFactoryThread, self).__init__() 
      self.timeout = 2.0 

     def _process_message(self, obj): 
      if obj!='': 
       if obj ['message'] == 'new connection': 
        logger.info("new connection") 
        self.socket.send_obj({"dbResult": "result"}) 
       else: 
        logger.info(obj) 
        self.socket.send_obj({"dbResult": "result"}) 


    if __name__ == '__main__': 
     import time 
     import jsocket 

     server = jsocket.ServerFactory(MyFactoryThread) 
     server.timeout = 2.0 
     server.start() 

     time.sleep(1) 
     client = jsocket.JsonClient() 
     client.connect() 
     client.send_obj({"message":"new connection"}) 

     client.read_obj() 

     client.close() 

     server.stop() 
     server.join() 

堆棧跟蹤:

[email protected]:~/programming/lights/comms $ sudo python testJSocket.py 
    [2016-02-11 20:28:54,475][DEBUG][tserver][start] Threaded Server has been started. 
    [2016-02-11 20:28:55,479][DEBUG][jsocket_base][accept_connection] connection accepted, conn socket (127.0.0.1,39001) 
    [2016-02-11 20:28:55,481][INFO][jsocket_base][connect] ...Socket Connected 
    [2016-02-11 20:28:55,485][INFO][testJSocket][_process_message] new connection 
    [2016-02-11 20:28:55,486][INFO][tserver][run] client connection broken, closing socket 
    [2016-02-11 20:28:55,487][DEBUG][jsocket_base][_close_connection] closing the connection socket 
    [2016-02-11 20:28:55,488][DEBUG][jsocket_base][_close_socket] closing main socket 
    Traceback (most recent call last): 
     File "testJSocket.py", line 39, in <module> 
     client.read_obj() 
     File "/usr/local/lib/python2.7/dist-packages/jsocket/jsocket_base.py", line 74, in read_obj 
     size = self._msg_length() 
     File "/usr/local/lib/python2.7/dist-packages/jsocket/jsocket_base.py", line 69, in _msg_length 
     d = self._read(4) 
     File "/usr/local/lib/python2.7/dist-packages/jsocket/jsocket_base.py", line 65, in _read 
     raise RuntimeError("socket connection broken") 
    RuntimeError: socket connection broken 

上的任何想法如何解決這個問題?

回答

0

已解決。我引用了錯誤的套接字。正確的代碼:

 def _process_message(self, obj): 

      if obj!='': 
       if obj ['message'] == 'new connection': 
        logger.info("new connection") 
        self.send_obj({"dbResult": "result"}) 
       else: 
        logger.info(obj) 
        self.send_obj({"dbResult": "result"})