Bạn có thể sử dụng Socket.IO với Python không?

Nhiều nhà tài trợ cá nhân cũng hỗ trợ dự án này thông qua các khoản đóng góp nhỏ liên tục. Tại sao không tham gia cùng họ?

phiên bản tương thích

Cái ổ cắm. Giao thức IO đã trải qua một số phiên bản và một số trong số này đã đưa ra các thay đổi không tương thích ngược, có nghĩa là máy khách và máy chủ phải sử dụng các phiên bản tương thích để mọi thứ hoạt động

Nếu bạn đang sử dụng máy khách và máy chủ Python, cách dễ nhất để đảm bảo khả năng tương thích là sử dụng cùng một phiên bản của gói này cho máy khách và máy chủ. Nếu bạn đang sử dụng gói này với một máy khách hoặc máy chủ khác, thì bạn phải đảm bảo các phiên bản tương thích

Biểu đồ tương thích phiên bản bên dưới ánh xạ các phiên bản của gói này với các phiên bản triển khai tham chiếu JavaScript và các phiên bản của Ổ cắm. IO và Động cơ. giao thức IO

Sau khi viết một WebSocket trong GO, tôi quyết định cung cấp một WebSocket Python là công bằng. Tuy nhiên, điều này đã được thực hiện bởi TraderMade tại đây. Vì vậy, tôi quyết định tập trung vào SocketIO. Nếu bạn đang tìm Python REST API hoặc SDK, vui lòng xem bài viết

Tôi sẽ không nói chi tiết về sự khác biệt giữa Websocket và SocketIO nhưng nếu bạn quan tâm thì đây là một bài viết chi tiết. Khi chúng tôi làm việc cùng với hướng dẫn, bạn sẽ thấy tại sao Socketio là lựa chọn phổ biến

Trước khi tiến xa hơn vì mục đích đơn giản, chúng tôi chỉ sử dụng mã máy khách và sử dụng Máy chủ Socketio trực tiếp để đẩy dữ liệu ngoại hối (trong trường hợp này là TraderMade). Tại sao bạn hỏi? . Ngoài ra, nó đưa ra một ví dụ thực tế đang được sử dụng

Vì vậy, hãy bắt đầu

Nhận khóa SocketIO

Trước tiên, bạn sẽ cần một khóa API để nhận dữ liệu ngoại hối trực tiếp từ Máy chủ Socketio, bạn có thể làm điều đó bằng cách đăng ký tại https. //dữ liệu thị trường. buôn bán. com/signup và chọn Bản dùng thử SocketIO như hình bên dưới. Sau khi bạn có chìa khóa, hãy giữ nó an toàn

Mã thiết lập

Đầu tiên, Cài đặt các Thư viện chính để thiết lập

python-engineio==3.14.2
python-socketio==4.3.1

Có thể có các phụ thuộc khác mà bạn có thể cần nhưng hai phụ thuộc trên cần chính xác để ví dụ hoạt động

Giới thiệu SocketIO nhanh

Trước khi chúng ta tiếp tục tóm tắt nhanh về những gì Socketio thực sự làm trong python

  1. Trong SocketIO, tin nhắn được gửi và nhận bởi cả máy khách và máy chủ dưới dạng sự kiện
  2. Sự kiện giúp giao tiếp giữa 2 bên không va chạm

Ok, không cần lo lắng về điểm thứ hai, nó sẽ trở nên rõ ràng hơn khi chúng ta xem qua mã. Để biết chi tiết bạn có thể đọc thêm

Mã phía máy khách

Chúng ta sẽ lần lượt đi qua từng phần của mã. Đầu tiên chúng ta sẽ import Socketio sau đó tạo một đối tượng có tên là “sio” như hình bên dưới. Điều này sẽ thực hiện công việc tạo ứng dụng khách và kết nối với URL

import socketio

# standard Python
sio = socketio.Client()

Khi chúng tôi có đối tượng, chúng tôi sẽ thiết lập một sự kiện để kết nối ban đầu với máy chủ Socketio (TraderMade). Như được hiển thị bên dưới, chúng tôi có thể thiết lập một sự kiện có def connect() sẽ được gọi ban đầu khi chúng tôi kết nối với máy chủ

@sio.event
def connect():
print("I'm connected!")
sio.emit('login', {'userKey': 'Your Streaming API Key'})

Khi kết nối, chúng tôi sẽ phát ra một sự kiện trên máy chủ, trong trường hợp này là “đăng nhập”. Vì vậy, về cơ bản, chúng tôi đang gửi khóa người dùng ở định dạng JSON mà chúng tôi đã nhận được trước đó khi đăng ký vào máy chủ để nhận dạng chính mình

Bây giờ nó đã trở nên rõ ràng hơn một chút rằng một số sự kiện đang lắng nghe một loại thông tin nhất định. Hãy xem những gì xảy ra tiếp theo

@sio.even
def connect_error():
print("The connection failed!")

@sio.on('handshake')
def on_message(data):
print('HandShake', data)
sio.emit('symbolSub', {'symbol': 'EURUSD'})

Connect_error tự giải thích, vì vậy hãy phân tích sự kiện bắt tay. Vì vậy, bắt tay là một sự kiện mà máy chủ (TraderMade) phát ra (gửi tới). Vì vậy, chúng tôi cần nó trên mã phía máy khách SocketIO nếu không chúng tôi sẽ bỏ lỡ chuỗi liên lạc và không bao giờ nhận được dữ liệu

Bây giờ, rõ ràng là một số sự kiện đang đẩy dữ liệu. Khi nhận được một cái bắt tay, chúng tôi sẽ in dữ liệu được gửi cho chúng tôi

Đã nhận từ máy chủ

Welcome to the TMS Data Feed

Bây giờ chúng tôi có thể yêu cầu dữ liệu ngoại hối nhưng làm thế nào máy chủ biết những gì chúng tôi muốn. Vì vậy, chúng tôi sẽ đăng ký Biểu tượng bằng cách phát ra một sự kiện có tên là “symbolSub” và chúng tôi sẽ gửi {'symbol'. ‘EURUSD’} dưới dạng dữ liệu từ phía khách hàng

@sio.on('price')
def on_message(data):
print('Price Data ', data)
sio.connect('https://marketdata.tradermade.com')

Chà, bây giờ khá dễ dàng để xem điều gì đang xảy ra trong sự kiện trên. Cần có URL ở cuối để kết nối cuối cùng sau khi chúng tôi hiểu mã

thì đấy. Chúng tôi đang nhận được tỷ giá ngoại hối cho EURUSD với dấu thời gian

Đã nhận từ máy chủ

Price Data EURUSD 1.20543 1.20543 1.20543 20210303–14:27:59.496

Đây là toàn bộ mã

import socketio

# standard Python
sio = socketio.Client()

@sio.event
def connect():
print("I'm connected!")
sio.emit('login', {'userKey': 'streaming_api_key'})

@sio.event
def connect_error():
print("The connection failed!")

@sio.event
def message(data):
print('I received a message!')

@sio.on('handshake')
def on_message(data):
print('HandShake', data)
sio.emit('symbolSub', {'symbol': 'USDJPY'})
sio.emit('symbolSub', {'symbol': 'GBPUSD'})
sio.emit('symbolSub', {'symbol': 'EURUSD'})

@sio.on('price')
def on_message(data):
print('Price Data ', data)


sio.connect('https://marketdata.tradermade.com')

Hi vọng điêu nay co ich. Vui lòng để lại nhận xét và đề xuất của bạn. Tôi sẽ theo dõi với một ví dụ về máy chủ trong tương lai

ổ cắm như thế nào. IO có hoạt động với Python không?

Ổ cắm. IO là một giao thức truyền tải cho phép giao tiếp dựa trên sự kiện hai chiều trong thời gian thực giữa các máy khách (thông thường, mặc dù không phải lúc nào cũng là trình duyệt web) và máy chủ . Việc triển khai chính thức của các thành phần máy khách và máy chủ được viết bằng JavaScript.

Socket ngôn ngữ gì. IO sử dụng?

Ổ cắm. IO là một thư viện hướng sự kiện dành cho các ứng dụng web thời gian thực. Nó cho phép giao tiếp hai chiều, thời gian thực giữa máy khách và máy chủ web. . Ổ cắm. IO

Tôi có thể sử dụng Ổ cắm không. IO với Django?

django-socketio là một ứng dụng Django được BSD cấp phép tập hợp nhiều tính năng cho phép bạn sử dụng WebSockets liền mạch với bất kỳ dự án Django nào .

Làm cách nào để gửi dữ liệu bằng socket trong Python?

Tổng quan. .
Phương thức send() của lớp socket của Python được sử dụng để gửi dữ liệu từ socket này sang socket khác
Phương thức gửi () chỉ có thể được sử dụng với ổ cắm được kết nối. .
Phương thức send() có thể được sử dụng để gửi dữ liệu từ ổ cắm máy khách dựa trên TCP đến ổ cắm được kết nối với máy khách dựa trên TCP ở phía máy chủ và ngược lại