cuốn sách gpt4 ai đã làm

apache - Có thể mô phỏng điều khiển luồng trong giao thức HTTP không? (Giao thức HTTP gốc)

In lại Tác giả: Taklimakan Thời gian cập nhật: 2023-11-01 19:07:21 28 4
mua khóa gpt4 Nike

Tôi có hàng trăm thiết bị phần cứng tại cơ sở của khách hàng và cần gửi dữ liệu HTTP qua giao diện telnet.
Mục tiêu đang chờ dữ liệu Máy chủ web Apache 2 và tập lệnh PHP.

Điều này đã hoạt động tốt nhưng chúng tôi nhận thấy rằng phần cứng liên quan không thể xử lý việc kiểm soát luồng hw, điều đó có nghĩa là khi dữ liệu được lấp đầy (khoảng 250 byte), bộ đệm sẽ bị tràn, gây ra hỏng dữ liệu.
Việc sửa dòng HW không phải là một tùy chọn, chương trình cơ sở "modem" đã bị tắt và nhà cung cấp không thể sửa đổi được nữa vì đây là phần cứng khá cũ.

Thông thường chúng ta sẽ sử dụng điều này:

BÀI ĐĂNG/HTTP/1.1
Máy chủ: api.server
Tác nhân người dùng: P8
Loại nội dung: application/x-www-form-urlencoded
Chấp nhận: */*
Độ dài nội dung: 767

VARIABLE=URLENCODED_DATA(tổng chiều dài 767 byte)

Điều này hoạt động tốt với điều khiển luồng, nhưng trong trường hợp của tôi, 767 byte là quá nhiều.
Sau khoảng 200 byte, bộ đệm sẽ bị ghi đè và một số byte sẽ bị mất.
Cách hiện tại duy nhất để nó hoạt động là sử dụng độ trễ khi gửi tới "modem" để nó có thể xóa bộ đệm kịp thời. Tuy nhiên, trên trang web, điều này sẽ không hoạt động do kết nối Internet không ổn định và giờ không thể đoán trước.

Tôi không phải là chuyên gia về HTTP, tôi chỉ ước mình có thể phân mảnh gói tin.
Tôi đã cân nhắc việc sử dụng "Kết nối: duy trì" hoặc một cái gì đó như thế.

Câu hỏi chính của tôi:
Có cách nào để gửi dữ liệu POST ($VARIABLE) đến máy chủ Apache 2 theo các khối nhỏ hơn và yêu cầu máy chủ HTTP kết hợp chúng thành một luồng nội bộ không?

伪代码:

BÀI ĐĂNG/HTTP/1.1
Máy chủ: api.server
Tác nhân người dùng: P8
Loại nội dung: application/x-www-form-urlencoded
Chấp nhận: */*
Độ dài nội dung: 400
Connection: keep-alive

VARIABLE=URLENCODED_DATA(200 byte)
KẾT THÚC\n\n

Máy chủ đang nhận "ĐƯỢC RỒI" và sau đó phản hồi trong luồng TCP.
Gửi khối tiếp theo:

VARIABLE=URLENCODED_DATA(200 byte)

Kết nối đã bị đóng.
Khi đạt đến 400 byte, quy trình đã sẵn sàng và Apache chuyển tiếp VARIABLE tới đầu vào POST của tập lệnh PHP.

Giống như điều khiển luồng HTTP trên các kết nối TCP mở.
Có thể có một tính năng HTTP được xây dựng cho mục đích này hoặc thứ gì đó có thể bị "lạm dụng" để chạy theo cách này. duy trì sự sống chỉ là một phỏng đoán.

Nếu giao thức HTTP hiện tại không có tính năng như vậy, cách duy nhất tôi có thể nghĩ để giải quyết vấn đề của mình là triển khai kiểm soát luồng ở phía PHP.
Tôi ước gì có cách nào tốt hơn thế này.

Cập nhật: Đồng thời tôi tìm thấy hai tham số thú vị: Kỳ vọng: 100 - Tiếp tục Mã hóa chuyển: Chunked

Điều tôi cần là sự kết hợp của cả hai. Mã hóa truyền tải theo khối dự kiến ​​sẽ tiếp tục 100 lần sau mỗi khối!

câu trả lời hay nhất

Đây là một câu hỏi rất thú vị và nó thực sự không liên quan gì đến HTTP mà liên quan đến TCP.

Giải pháp cho vấn đề này là sử dụng proxy trung gian để xử lý thiết bị của bạn. Lý tưởng nhất là thiết bị này có thể đặt kích thước cửa sổ trên các ACK gói TCP bằng kích thước của bộ đệm thiết bị. Kích thước cửa sổ này sẽ gần bằng 0 khi thiết bị không thể xử lý được nữa. Nếu làm như vậy, bạn sẽ tận dụng được tính năng điều khiển luồng tích hợp của TCP và giải quyết vấn đề một cách đơn giản.

Một điều khác bạn có thể làm là giữ nó hoàn toàn trong lớp ứng dụng và đặt proxy trung gian này vào bộ đệm tất cả dữ liệu trong phản hồi. Đối với hầu hết các phản hồi HTTP thông thường, điều này là ổn.

Giới thiệu về Apache - Có thể mô phỏng điều khiển luồng trong giao thức HTTP không? (giao thức HTTP gốc), chúng tôi đã tìm thấy một câu hỏi tương tự trên Stack Overflow: https://stackoverflow.com/questions/29674238/

28 4 0
Chứng chỉ ICP Bắc Kinh số 000000
Hợp tác quảng cáo: 1813099741@qq.com 6ren.com
Xem sitemap của VNExpress