Ví dụ máy khách websockets Python

def __init__[ tự, hook, máy chủ. đường, cảng. int, an toàn. bool = Sai, id. Công đoàn[int, str] = 0, is_client_worker. bool = Sai, log_msgs. bool = Sai, dài dòng. bool = Sai, dữ liệu. Danh sách [Liên minh [ngọn đuốc. Tensor, AbstractTensor]] = Không, hết thời gian chờ. int = Không, ]. """Một ứng dụng khách sẽ chuyển tiếp tất cả thư tới nhân viên từ xa đang chạy WebsocketServerWorker và nhận lại tất cả phản hồi từ máy chủ. """ bản thân. cổng = cổng tự. chủ nhà = chủ nhà. thời gian chờ = TIMEOUT_INTERVAL nếu thời gian chờ là Không có siêu thời gian chờ nào khác []. __init__[ hook=hook, id=id, data=data, is_client_worker=is_client_worker, log_msgs=log_msgs, verbose=verbose, ] # tạo kết nối với máy chủ được giữ mở cho đến khi # WebsocketClientWorker được thu gom rác. # Cờ bảo mật thêm một lớp bảo mật áp dụng mật mã và tự xác thực. an toàn = an toàn bản thân. ws = Không có bản thân. liên kết[]

http. //pypi. con trăn. org/pypi/websocket-client/

Cực kỳ dễ sử dụng

 sudo pip install websocket-client

Mã khách hàng mẫu

#!/usr/bin/python

from websocket import create_connection
ws = create_connection["ws://localhost:8080/websocket"]
print "Sending 'Hello, World'..."
ws.send["Hello, World"]
print "Sent"
print "Receiving..."
result =  ws.recv[]
print "Received '%s'" % result
ws.close[]

Mã máy chủ mẫu

#!/usr/bin/python
import websocket
import 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]:
        for i in range[30000]:
            time.sleep[1]
            ws.send["Hello %d" % i]
        time.sleep[1]
        ws.close[]
        print "thread terminating..."
    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[]

Mục tiêu của bài đăng này là giải thích cách tạo một máy khách websocket Python đơn giản để liên hệ với máy chủ echo thử nghiệm trực tuyến

 

Giới thiệu

Mục tiêu của bài đăng này là giải thích cách tạo một máy khách websocket Python đơn giản để liên hệ với máy chủ echo thử nghiệm trực tuyến

Chúng tôi sẽ sử dụng thư viện websockets, cho phép phát triển cả máy khách và máy chủ websocket [1]

Để cài đặt thư viện Python này, cách dễ nhất là sử dụng pip, trình cài đặt gói Python. Sử dụng pip, chúng ta chỉ cần đưa ra lệnh sau trên dòng lệnh Windows [trên một số cài đặt Python cũ hơn, bạn có thể cần điều hướng đến thư mục Tập lệnh trước khi có thể gửi lệnh pip]

pip install websockets

Lưu ý rằng thư viện này yêu cầu phiên bản Python cao hơn hoặc bằng v3. 4 [1]. Tuy nhiên, hầu hết các ví dụ hiển thị trong tài liệu đều sử dụng cú pháp async await mới, vì vậy tôi khuyên bạn nên sử dụng Python v3. 5 hoặc cao hơn

Các thử nghiệm hiển thị bên dưới được thực hiện trên Python v3. 6


Mật mã

Chúng tôi bắt đầu mã của mình bắt đầu bằng cách nhập mô-đun websockets đã cài đặt trước đó. Vì thư viện này được xây dựng dựa trên khung của Python [2], nên chúng tôi cũng sẽ cần nhập mô-đun đó

import asyncio
import websockets

Vì mã sẽ hoạt động không đồng bộ, chúng tôi sẽ khai báo một hàm không đồng bộ Python [còn được gọi là [3]], nơi chúng tôi sẽ viết mã máy khách. Chúng tôi làm điều này bằng cách đưa từ khóa async vào trước phần khai báo hàm [3]

Chúng tôi sẽ gọi chức năng kiểm tra của chúng tôi, như có thể thấy bên dưới

async def test[]:
# client code

Để tạo kết nối máy khách websocket, chúng ta cần gọi hàm từ mô-đun websockets [4]. Nó tạo ra một đối tượng của lớp mà sau đó chúng ta có thể sử dụng để gửi và nhận thông báo websocket [4]. Bạn có thể đọc thêm về năng suất trong bài viết thú vị này

Tuy nhiên, xin lưu ý rằng trên Python phiên bản 3. 5 trở lên, phương thức kết nối có thể được sử dụng làm  [4]. Nếu đúng như vậy, thì sau này chúng ta sẽ không cần phải đóng kết nối một cách rõ ràng bằng lệnh gọi phương thức đóng vì kết nối đã bị đóng khi thoát khỏi ngữ cảnh [4]

Vì tôi đang dùng Python 3. 6, tôi sẽ tận dụng trình quản lý bối cảnh không đồng bộ. Nếu bạn đang sử dụng phiên bản thấp hơn của Python không hỗ trợ nó, vui lòng kiểm tra các ví dụ về máy khách mô-đun websockets để biết các phiên bản đó

Vì vậy, chúng tôi sẽ sử dụng cú pháp sau để lấy trình quản lý bối cảnh

không đồng bộ với EXPR dưới dạng VAR

Áp dụng cho ví dụ của chúng tôi, EXPR tương ứng với việc gọi phương thức kết nối mà chúng tôi đã đề cập. Phương thức này nhận đầu vào là điểm cuối đích websocket mà chúng tôi muốn liên hệ

Để làm cho các bài kiểm tra của chúng tôi đơn giản hơn, như đã đề cập trong phần giới thiệu, chúng tôi sẽ sử dụng máy chủ websocket thử nghiệm trực tuyến sẽ phản hồi lại nội dung chúng tôi gửi.

async def test[]:

    async with websockets.connect['ws://demos.kaazing.com/echo'] as websocket:
    #Client async code

Bây giờ, để gửi dữ liệu thực tế, chúng ta chỉ cần gọi coroutine truyền dưới dạng đầu vào là chuỗi dữ liệu mà chúng ta muốn gửi cho máy khách. Chúng tôi sẽ gửi một tin nhắn “xin chào” đơn giản

Vì đây là một quy trình đăng ký, chúng tôi sẽ đợi nó bằng cách sử dụng từ khóa. Lưu ý rằng lệnh gọi await tạm dừng việc thực thi quy trình đăng quang hiện tại [cuộc gọi được thực hiện, trong trường hợp của chúng tôi là chức năng kiểm tra] cho đến khi hoàn thành và trả về dữ liệu kết quả [5]

Lưu ý rằng một coroutine là một queueable [6], đó là lý do tại sao chúng ta có thể sử dụng từ khóa await trên send coroutine

Đặc biệt đối với lần gửi, chúng tôi không cần phân tích kết quả của nó, vì vậy chúng tôi có thể chuyển sang phần còn lại của mã. Bạn có thể kiểm tra mã nguồn để gửi

await websocket.send["hello"]

Tiếp theo, để nhận dữ liệu được ứng dụng khách phản hồi lại, chúng tôi gọi coroutine. Nó không nhận đối số và trả về một chuỗi có khung văn bản do máy chủ gửi [hoặc một đối tượng byte trong trường hợp đó là khung nhị phân] [7]. Trong trường hợp của chúng tôi, vì nó sẽ lặp lại những gì chúng tôi đã gửi trước đó, nên nó sẽ là một chuỗi

Chúng tôi sẽ lưu trữ kết quả của việc chờ coroutine này trong một biến và sau đó in nó

________số 8

Và với điều này, chúng tôi hoàn thành chức năng máy khách của mình. Lưu ý rằng bây giờ, để thực thi mã của nó, chúng ta cần lấy mã asyncio, vì mã async chỉ có thể chạy bên trong vòng lặp sự kiện [8]

Sau đó, trong vòng lặp sự kiện, chúng tôi gọi phương thức  và chuyển làm đầu vào cho quy trình kiểm tra của chúng tôi, vì vậy quy trình này được thực thi. Mã nguồn cuối cùng có thể được nhìn thấy dưới đây

import asyncio
import websockets

async def test[]:

    async with websockets.connect['ws://demos.kaazing.com/echo'] as websocket:

        await websocket.send["hello"]

        response = await websocket.recv[]
        print[response]

asyncio.get_event_loop[].run_until_complete[test[]]

Kiểm tra mã

Để kiểm tra mã, chỉ cần chạy tập lệnh trước đó [Tôi đang sử dụng IDLE, IDE đi kèm với bản cài đặt Python để chạy mã]

Bạn sẽ nhận được một đầu ra tương tự như hình 1, cho thấy rằng đầu ra được in ra dấu nhắc Python tương ứng chính xác với nội dung chúng tôi đã gửi đến máy chủ, sau đó được phản hồi lại cho máy khách

Làm cách nào để tạo ứng dụng khách WebSocket bằng Python?

Ứng dụng khách WebSocket với Python . py” và nhập các gói như chúng ta đã làm trong mã máy chủ Create a new File “client.py” and import the packages as we did in our server code . Bây giờ, hãy tạo một hàm không đồng bộ Python [còn gọi là coroutine]. kiểm tra xác định không đồng bộ []. Chúng tôi sẽ sử dụng chức năng kết nối từ mô-đun WebSockets để xây dựng kết nối máy khách WebSocket.

Làm cách nào để cài đặt ứng dụng khách WebSocket trong Python?

Mở thiết bị đầu cuối hoặc shell Linux của bạn . Gõ “ pip install websocket-client ” [không có dấu ngoặc kép], nhấn Enter . Nếu nó không hoạt động, hãy thử "pip3 install websocket-client" hoặc “ python -m pip install websocket-client “. Đợi quá trình cài đặt kết thúc thành công.

Làm cách nào để lấy dữ liệu từ WebSocket Python?

Đang kết nối với máy chủ websocket .
Tạo một tệp Python mới có tên websocket_test. py và kết nối với Mười hai máy chủ Dữ liệu bằng thư viện trình bao bọc. # websocket_test. py. .
Bây giờ hãy chạy tập lệnh Python. .
Sau khi chạy tập lệnh, bạn ngay lập tức nhận được phản hồi từ máy chủ về trạng thái kết nối của mình

Python có hỗ trợ WebSockets không?

websockets là thư viện để xây dựng máy chủ và máy khách WebSocket bằng Python tập trung vào tính chính xác, đơn giản, mạnh mẽ và hiệu suất. Được xây dựng dựa trên asyncio , khung I/O không đồng bộ tiêu chuẩn của Python, nó cung cấp một API dựa trên coroutine tao nhã.

Chủ Đề