WebSocket长连接心跳与短连接

作者: 新闻动态  发布:2019-10-18

python websocket

安装

pip install websocket-client

 

 

先来看一下,长连接调用格局:

    ws = websocket.WebSocketApp("ws://echo.websocket.org/",
                              on_message = on_message,
                              on_error = on_error,
                              on_close = on_close)
    ws.on_open = on_open
    ws.run_forever()

 

 长连接,参数介绍:

(1)url: websocket的地址。

(2)header: 顾客发送websocket握手须要的央浼头,{'head1:value1','head2:value2'}。

(3)on_open:在创设Websocket握手时调用的可调用对象,那个办法唯有三个参数,正是此类自身。

(4)on_message:那一个指标在接受到服务器重回的音讯时调用。有四个参数,一个是此类自身,一个是大家从服务器获取的字符串(utf-8格式)。

(5)on_error:这么些目的在蒙受错误时调用,有三个参数,第叁个是此类本人,第三个是不行对象。

(6)on_close:在遇见一而再关闭的情形时调用,参数唯有三个,便是此类本人。

(7)on_cont_message:那个指标在收受到连年帧数据时被调用,有八个参数,分别是:类本身,从服务器接受的字符串(utf-8),三回九转标识。

(8)on_data:当从服务器收到到新闻时被调用,有多少个参数,分别是:该类自个儿,接收到的字符串(utf-8),数据类型,一而再标识。

(9)keep_running:多个二进制的标记位,借使为True,那么些app的主循环将到处运维,默许值为True。

(10)get_mask_key:用于产生二个掩码。

(11)subprotocols:一组可用的子合同,默认为空。

 

长连接首要措施:ws.run_forever(ping_interval=60,ping_timeout=5)

 假若持续按钮闭websocket连接,会直接不通下去。另外这一个函数带多个参数,若是传的话,运行心跳包发送。

 

ping_interval:自动发送“ping”命令,每一种钦赐的时光(秒),如若设置为0,则不会自行发送。

ping_timeout:若无收到pong新闻,则为超时(秒)。

ws.run_forever(ping_interval=60,ping_timeout=5)

#ping_interval心跳发送间隔时间

#ping_timeout 设置,发送ping到收到pong的超时时间

 

作者们看源代码,会意识这么一断代码:

ping的超时时间,要压倒ping间距时间

 

        if not ping_timeout or ping_timeout <= 0:
            ping_timeout = None
        if ping_timeout and ping_interval and ping_interval <= ping_timeout:
            raise WebSocketException("Ensure ping_interval > ping_timeout")

 

 

 

 

长连接:

示例1:

 

import websocket
try:
    import thread
except ImportError:
    import _thread as thread
import time

def on_message(ws, message):
    print(message)

def on_error(ws, error):
    print(error)

def on_close(ws):
    print("### closed ###")


def on_open(ws):
    def run(*args):
        ws.send("hello1")
        time.sleep(1)
        ws.close()
    thread.start_new_thread(run,())

if __name__ == "__main__":
    websocket.enableTrace(True)
    ws = websocket.WebSocketApp("ws://echo.websocket.org/",
                              on_message = on_message,
                              on_error = on_error,
                              on_close = on_close)
    ws.on_open = on_open
    ws.run_forever(ping_interval=60,ping_timeout=5)

 

示例2:

import websocket
from threading import Thread
import time
import sys


class MyApp(websocket.WebSocketApp):
    def on_message(self, message):
        print(message)

    def on_error(self, error):
        print(error)

    def on_close(self):
        print("### closed ###")

    def on_open(self):
        def run(*args):
            for i in range(3):
                # send the message, then wait
                # so thread doesn't exit and socket
                # isn't closed
                self.send("Hello %d" % i)
                time.sleep(1)

            time.sleep(1)
            self.close()
            print("Thread terminating...")

        Thread(target=run).start()


if __name__ == "__main__":
    websocket.enableTrace(True)
    if len(sys.argv) < 2:
        host = "ws://echo.websocket.org/"
    else:
        host = sys.argv[1]
    ws = MyApp(host)
    ws.run_forever()

 

 

短连接:

from websocket import create_connection
ws = create_connection("ws://echo.websocket.org/")
print("Sending 'Hello, World'...")
ws.send("Hello, World")
print("Sent")
print("Receiving...")
result =  ws.recv()
print("Received '%s'" % result)
ws.close()

 

——

本文由全球彩票历史版本发布于新闻动态,转载请注明出处:WebSocket长连接心跳与短连接

关键词: