Sự khác nhau giữa remoting và Socket trong C#?

Tình hình là mình đang định lập trình một hệ thống ứng dụng tương tự như ứng dụng fb với các tính năng up stt , gửi tin nhắn , up ảnh, nghe gọi video ,chat nhóm,gửi tài liệu …, mình đã xây dựng xong database và vấn đề bây h là chọn phương thức truyền dữ liệu trên mạng , Mình có học về lập trình mạng với socket( mình từng lập trình một ứng dụng chat dùng socket) nhưng hôm trước mình có thấy trên mạng có một bài về masharling và remoting và cũng có người lập trình một ứng dụng chat sử dụng phương thức này. Có bác nào hiểu về phương thức này không ưu nhược điểm so với socket ra làm sao

Theo mình hiểu, để truyền data giữa các app (local hoặc remote) thì buộc phải truyền 1 chuỗi nào đó, do đó socket là cách truyền ở tầng phía dưới, còn RMI (marshaling/remoting) là nói tới tầng phía trên rồi (tức là tầng Framework, được build trên tầng socket)

  • Socket: truyền binary giữa các app.
  • Marshallng/Remoting: truyền các object qua context của process đang chạy (remoting là nói tới truyền qua NET). Muốn làm được việc đó, app_1 phải clone 1 proxy của object, rồi serialize nó ra thành chuỗi, gửi sang app_2, app_2 nhận chuỗi rồi unserialize thành object và sử dụng object này trong app của nó. 2 cái app này thường phải cùng ngôn ngữ thì mới biết cách serialize/unserialize được.

Ngoài kỹ thuật marshaling thì giờ người ta còn dùng kỹ thuật XML/JSON serialize. Khi dùng kỹ thuật này, các app giao tiếp với nhau mà không cần chung ngôn ngữ (vì là text plain). app1 muốn gửi 1 obj sang obj2, nó clone proxy, serialize proxy thành chuỗi json, app2 nhận chuỗi và dịch ngược chuỗi json thành object của nó. Kỹ thuật này hiện phổ biến hơn kỹ thuật marshaling nhiều vì tính đơn giả, cross platform.

Hiện kỹ thuật marshalling mình chỉ thấy nhiều trong lập trình hướng event (nhất là mô hình Broadcast/Receiver). Các event gửi các message sang một con EventBus, rồi con EventBus phân phối msg này tới Worker đảm nhận. Vì cùng ngôn ngữ nên việc marshalling này nhanh.

3 Likes

Cám ơn bác, nhưng bác cho em hỏi là nếu lập trình một ứng dụng mạng thì (ví dụ như ứng dụng chat LAN) thì nên dùng socket hay RMI , tại em thấy riêng cái socket server nó phải tạo nhiều thread để xử lí dữ liệu , nếu bây h chuyển dữ liệu kiểu như voice chat hoặc video call thì không biết phải xử lí kiểu gì cho phù hợp. trong khi đó như bác nói là cái RMI có thể chuyền được cả đối tượng sang .

1 Like

Nếu ứng dụng chat support voice / video thì chắc dùng socket sẽ dễ streaming sang hơn. Chứ nếu dùng object marshalling thì làm sao gói được cái voice / video stream này nhỉ?

Còn nếu chỉ text chat thì việc gói thành 1 message sẽ dễ dàng hơn.

cái ứng dụng em thấy trên mạng n dùng marshling remoting để gửi video mà. E thấy dùng stream dòng bit thì tại một thời điểm thì chỉ gửi đk một byte thui. Bây h hình ảnh và âm thanh n phải đồng bộ với nhau mới khó

Bạn gửi cho mình link mình ngó qua xem họ làm thế nào? Hi, tò mò chút. Chắc gửi theo từng frame hoặc gửi theo từng time (ví dụ 1s có 24 khung hình thì cứ 1s mình gửi sang bên kia). Sang bên kia thì save cái binary stream vào RAM và play theo kiểu playlist.

Chứ nếu gửi rồi nối stream data này thì không rõ có được không? Video/Sound là dạng file khá đặc biệt vì nó chỉ cần header ở đầu qui định encoding, sau đó thì data nằm lần lượt không liên quan tới nhau, vì thế mà không cần tải hết video/sound vẫn có thể view được.

Đồng bộ thì cứ theo thời gian thực thôi chứ nhỉ? Giả sử mình gửi video từ webcam và gửi sound từ micro, cứ 1s mình gửi 2 data này sang và play. Nếu có truyền chậm thì chắc cũng khó mà xử lý, đến skype khi network lỗi sound vẫn đi trước hình mà.

link e không nhớ , không biết có chức năng up file lên diễn đàn không nhỉ

cơ bản là làm sao mà căn chỉnh được 1s để truyền ấy chứ

à link đây rùi https://drive.google.com/file/d/0BxxBHYI3rz8bN2JyTEF4WXhuRDA/view?usp=sharing

Mình k vào được. K có link bài tut hả bạn.

Cái link khó tìm quá. H e cũng ko nhớ nữa

Ai có tài liệu về lập trình socket hay .Net remoting gì không ạ? Cho mình xin với, môn này mình bị hỏng kiến thức rồi :confused:

83% thành viên diễn đàn không hỏi bài tập, còn bạn thì sao?