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ố 8Và 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