Tôi đang xem xét chuyển các phần của ứng dụng .Net sang các máy tính khác. Cách rõ ràng để làm điều này chỉ đơn giản là sử dụng WCF với một giao thức tcp nhị phân, ví dụ như describer trong "Easiest way to get fast RPC with .NET?".Cách tối ưu hóa để thực hiện RPC trong .Net
Tôi sẽ thực hiện một số lượng lớn các cuộc gọi và độ trễ là một vấn đề lớn. Về cơ bản một máy tính sẽ chạy một trình mô phỏng vật lý và những người khác sẽ tương tác với nó bằng cách sử dụng API của vài trăm lệnh.
Tôi nghĩ cách tốt nhất là tạo giao thức nhị phân tùy chỉnh trong đó các lệnh API được xác định bằng int16 và số thứ tự, và theo sau là các tham số bắt buộc. Hardwiring các lớp gửi và nhận sẽ loại bỏ bất kỳ chi phí không cần thiết nào.
Nhưng đó là rất nhiều công việc kể từ khi chúng tôi đang nói vài trăm lệnh API.
Bất kỳ suy nghĩ nào về cách tốt nhất để thực hiện nó?
Chỉnh sửa: Để làm rõ: AFAIK serialization in .Net không được tối ưu hóa. Có một hình phạt tương đối cao trong tuần tự hóa và deserializing đối tượng trong ví dụ việc sử dụng nội bộ của Reflection. Đây là loại những gì tôi muốn tránh, và do đó của tôi mặc dù xung quanh lập bản đồ trực tiếp (hardwiring) phương pháp.
Sau khi một số tìm kiếm tôi tìm thấy một ứng dụng tôi đã có một hồi ức mơ hồ về: http://www.protocol-builder.com/
Bạn nói * độ trễ * là một vấn đề lớn, nhưng độ trễ là khá nhiều cố định. * Băng thông * có phải là nút cổ chai của bạn ở đây không? Tôi có thể đề xuất các cách để giảm băng thông trong WCF nếu bạn muốn thỏa hiệp giữa conveniece của WCF và hiệu suất của một giao thức tùy chỉnh ... –
Với độ trễ tôi có nghĩa là thời gian cần từ một sự kiện vật lý (chẳng hạn như va chạm, trong hàng ngàn "cùng một lúc") để được xử lý và hành động theo. (Có, tôi cũng sẽ phải điều chỉnh số lượng sự kiện.) –
một cách hiệu quả để giảm chi phí là gửi một tin nhắn duy nhất có trọng tải lớn hơn. Quan hệ nào trở lại với việc giảm băng thông. Tôi khá thích trao đổi serializer, ví dụ (DataContractSerializer không được biết đến là terse) –