Pyslvs 開發進度

  • 改善 Server 突然關閉的狀況

ZMQ 防止連線中斷

使用 PyZMQ 提供的 Poll 類型檢測連線狀況:

Client

import zmq
context = zmq.Context()

socket_port = "tcp://localhost:8000"

socket = context.socket(zmq.REQ)
socket.bind(socket_port)
poll = zmq.Poller()
poll.register(self.socket, zmq.POLLIN)
while True:
    if socket.closed: #Reconnecting
        socket = context.socket(zmq.REQ)
        socket.bind(socket_port)
        poll.register(socket, zmq.POLLIN)
    socket.send_string("Hello!")
    while True:
        socks = dict(poll.poll(100))
        if socks.get(socket)==zmq.POLLIN:
            """Connected."""
            return socket.recv()
        else:
            """Connection interrupt."""
            socket.setsockopt(zmq.LINGER, 0)
            socket.close()
            poll.unregister(socket) #Socket will be deleted.
            return my_fun()

上面的程式碼中,若是沒有關閉 socket 或是斷線沒有重新連接,ZMQ 皆會回傳 Exception。

主要是解決 Server 中途斷線導致程式中斷,會自行運算彌補。

不過如果全部 Server 離線,Client 端仍會繼續等待 Server 連進來,會想辦法解決。

再來就是 Python 執行速度問題,Python 演算法要再改寫並優化,接下來會針對三種演算法加以改良。


Comments

comments powered by Disqus