2015-11-20 4 views
0

У меня была моя программа, в которой используется соединение с веб-разъемом. Раньше моя программа выполнялась корректно, но сегодня я получаю сообщение об ошибке, связанное с сообщением об ошибке. Соединение с сервером закрыто нечисто, требуется обновление 426. В клиенте я использую autobahn twisted version 15.4.0, а на сервере я использую ws websocket в узле js. Пожалуйста, дайте мне совет. Thankyou.Требуется обновление веб-макета 426

Это мой код клиента:

##WebSocket Class 
class MyClientProtocol (WebSocketClientProtocol): 
    def onConnect(self, response): 
     status = "Server connected: {0}".format(response.peer) 
     logData(status) 

    def onOpen(self): 
     status ="WebSocket connection open." 
     logData (status) 

     def SentData(): 
      select() 

      if (numberOfData==0): #jika data kosong koneksi terputus 
       # if there is no data, connection will closed 
       self.sendClose() 

      else: 
       self.sendMessage (dataSent.encode('utf8')) #send data if file not empty 

     SentData() 

    def onMessage(self, payload, isBinary): 
     if isBinary: 
      print("Binary message received: {0} bytes".format(len(payload))) 
     else: 
      # if server sent ack connection will close 
      if (payload.decode('utf8')=="ok"): 
       print("Text message received") 
       status="data sent" 
       logData(status) 
       dataNew[:]=[] 

       update() 
       # get time while sent 
       #p=subprocess.Popen("date", stdout=subprocess.PIPE, shell=True) 
       #output= str(p.communicate()) 
       #logData(output) 

       self.sendClose() 

      else: 
      # if server sent nack, data will resend 
       self.sendMessage(dataSent.encode('utf8')) 

    def onClose(self, wasClean, code, reason): 
     status ="WebSocket connection closed code [{}]: {}".format(code,reason) 
     logData (status) 
     self.factory.reactor.callLater (int(interval),webSocketConnect)#send data every 10 seconds 


#websocket connection function 
def webSocketConnect(): 
    factory = WebSocketClientFactory (u"wss://node-imamabdul-2.c9.io:8080", debug=False) 
    factory.protocol = MyClientProtocol 

    reactor.connectTCP("node-imamabdul-2.c9.io",8080, factory) 

#SIGINT 
def SIGINT_CustomEventHandler(num, frame): 
    k={1:"SIGHUP", 2:"SIGINT"} 
    status="Recieved signal - " + k[num] 
    logData(status) 
    if frame is not None: 
     status="SIGINT at %s:%s"%(frame.f_code.co_name, frame.f_lineno) 
     logData(status) 
    status="In SIGINT Custom Handler Shutting Down ..." 
    logData (status) 
    if num == 2: 
     #status= "shutting down ...." 
     exitFlag=True 
     reactor.stop() 


## main 
if __name__ == '__main__': 

    readID() 

    conn = sqlite3.connect(vcspath+'vcsdb2.db') 
    cur= conn.cursor() 
    create()  
    ## global variables 
    #os.system("hwclock -w -f /dev/rtc1") 
    exitFlag = False 
    Data =[] 
    DataStatus=False 
    #makeDir() 

    webSocketConnect() 
    signal.signal(signal.SIGINT, SIGINT_CustomEventHandler) 
    reactor.run() 

Это мой код сервера:

var WebSocketServer = require('ws').Server 
    , wss = new WebSocketServer({ port: process.env.PORT }); 

port = process.env.PORT; 
console.log("PORT :" + port); 
wss.on('connection', function connection(wss) { 
    console.log("connection opened" + wss.listeners()); 

    wss.on('message', function incoming(message) { 
    console.log("connection has message: " + message) 
    var fs = require('fs'); 
    var timestamp = new Date().toString('hex') 
    fs.appendFile('fromclient.csv',"['"+timestamp+"']"+' ' + message+'\n') 

    wss.send(message); 

    }); 
    wss.on('close', function closeSocket() { 
    console.log("connection closed"); 
    }); 
    wss.on('error', function socketError() { 
    console.log("connection has error"); 
    }); 
}); 
+0

Попробуйте подключиться к серверу с помощью javascript из вашего браузера ... можете ли вы подключиться или вы получите сообщение об ошибке? (попробуйте изолировать проблему - это проблема с сервером или проблема с клиентом)? – Myst

+0

Я могу подключиться к своему серверу. Если я подключусь к atubahn twisted v11, он тоже может подключиться. –

+0

Извините, имам, я не понял вашего ответа ... Когда вы пытаетесь подключиться к autobahn v11, вы можете подключиться (работать)? С raw websockets в javascript (без библиотеки) вы не можете подключиться (не работает)? и когда вы пытаетесь использовать autobahn v15, вы не можете подключиться (не работает)? – Myst

ответ

0

В своем коде вы используете зашифрованную WebSockets соединение, здесь (в коде Python):

#websocket connection function 
def webSocketConnect(): 
    factory = WebSocketClientFactory (u"wss://node-imamabdul-2.c9.io:8080", debug=False) 
    factory.protocol = MyClientProtocol 

    reactor.connectTCP("node-imamabdul-2.c9.io",8080, factory) 

Поскольку вы используете Autobahn 15.4.0 с wss, вы испытываете the issue (bug) that exists in Autobahn version 15.4.0.

Проблема была устранена 9 дней назад.

Вам необходимо либо обновить Autobahn до версии после исправления (действительно новая версия, если она была выпущена), либо обновить Autobahn до версии перед выпуском (ошибка).

Другой вариант заключается в использовании ws вместо wss - это означает, что ваше соединение НЕ будет зашифровано, и это не так, как рекомендовано.

Удачи вам!

+0

Я думаю, что моя проблема возникает, когда я пытаюсь подключиться к GSM модему. Но, когда я подключаюсь к LAN-соединению, у меня не возникло этой проблемы. –

+0

Благодарим вас за советы. Как обновить/понизить мой автобан? Но когда я использую соединение LAN/eth0, я не получил это сообщение об ошибке. –

+0

Я думаю, что у вас нет настройки SSL для вашего локального сервера ... поэтому, когда вы подключаетесь к локальному серверу, вы используете 'ws', а не' wss' ... или, может быть, ошибка Autobahn такая забавная ... Что касается обновления, я не знаю. Как вы установили версию 15.4.0? Я вижу версию 0.10.9 ...возможно, продолжать использовать старую версию до официального выпуска? – Myst

Смежные вопросы