2012-10-10 45 views
6

SignalR mất nhiều thư khi tôi truyền khối byte từ máy khách qua máy chủ đến máy khách (hoặc máy khách đến máy chủ hoặc máy chủ đến máy khách).Làm thế nào tôi có thể chuyển byte theo khối cho khách hàng?

Tôi đọc tệp vào luồng và gửi tệp qua kết nối trung tâm hoặc liên tục cho khách hàng khác. Điều này chạy rất nhanh, nhưng luôn có thông báo bị mất hoặc bị mất.

Làm cách nào để chuyển các tệp lớn (theo khối hoặc không) từ ứng dụng khách sang ứng dụng khách mà không làm mất tin nhắn?

Trả lời

5

Như @dfowler chỉ ra, đó không phải là công nghệ phù hợp cho công việc. Những gì tôi khuyên bạn nên làm là gửi một thông báo rằng có một tệp cần tải xuống bao gồm liên kết và sau đó bạn có thể tải xuống tệp đó bằng cách sử dụng các yêu cầu GET tiêu chuẩn đối với các tệp tĩnh hoặc một số dịch vụ web được viết bằng ASP.NET WebAPI.

4

SignalR không phải để truyền tệp, đó là để gửi tin nhắn.

4

Tại sao nó không phải là công nghệ phù hợp? Nếu một khách hàng cần gửi một số dữ liệu đến một trung tâm signalR nó sẽ có thể qua kết nối signalR mà không cần thêm công cụ.

Trong thực tế nó hoạt động tốt khi gửi một mảng byte, ít nhất là cho tôi, tuy nhiên tôi gặp phải vấn đề tương tự khi chuyển khối.

Có lẽ bạn có thể thực hiện một số kiểm tra để kiểm tra xem thứ tự mà bạn gửi các khối giống với thứ tự mà chúng được nhận.

CẬP NHẬT

Tôi đã làm một thử nghiệm bản thân mình và trong trường hợp của tôi thứ tự là thực sự là vấn đề. Sửa đổi phương thức hub nhận các khối để chấp nhận một tham số thứ tự mà sau đó tôi sử dụng để tái tạo lại mảng byte ở cuối và nó hoạt động tốt. Có nói điều này, tuy nhiên bây giờ tôi hiểu rằng điều này sẽ không làm việc tốt với chuyển tập tin lớn.

Trong trường hợp của mình, tôi không cần truyền lượng dữ liệu rất lớn, tôi chỉ muốn cung cấp cho UI một dấu hiệu tiến bộ, yêu cầu dữ liệu được gửi theo khối.

+0

Bạn có mã mẫu không? Làm thế nào bạn nhận được các khối? Cảm ơn – user1331889