thắc mắc Gửi 1 array byte qua mạng như thế nào

  • Người tạo chủ đề Người tạo chủ đề alexTVr1
  • Ngày bắt đầu Ngày bắt đầu

alexTVr1

Senior Member
như tít, vấn đề đặt ra là cái service mình muốn dùng nó chỉ cho phép send message ở dạng json, mình có tìm hiểu thì có hướng là mã hóa base64, hoặc hex array byte đó ra string rồi sang bên server decoding lại, nhưng có 1 cái mình sợ đó là client mình code bằng java, server code bằng nodejs, mình có thử mã hóa 1 vài packet bằng base64 rồi sang bên server decode lại thì thấy có vài packet nó thiếu dữ liệu, ngoài cách trên còn cách nào nữa ko?
 
như tít, vấn đề đặt ra là cái service mình muốn dùng nó chỉ cho phép send message ở dạng json, mình có tìm hiểu thì có hướng là mã hóa base64, hoặc hex array byte đó ra string rồi sang bên server decoding lại, nhưng có 1 cái mình sợ đó là client mình code bằng java, server code bằng nodejs, mình có thử mã hóa 1 vài packet bằng base64 rồi sang bên server decode lại thì thấy có vài packet nó thiếu dữ liệu, ngoài cách trên còn cách nào nữa ko?

Encode thành hex là được mà fen

Gửi từ Samsung SM-N975U1 bằng vozFApp
 
Dùng flatbuffer: https://github.com/google/flatbuffers
Cái này nó có thể gửi cả cấu trúc trong mềm quá mạng mà không cần phải encode/decode như các format khác.

Sent from Xiaomi M2007J20CG using vozFApp
gửi nguyên object luôn à thím, nhưng nguyên tắc muốn gửi object phức tạp đi thì phải implement cái serialization (trong java là thế), ngay cả cái redis hôm trước em test cũng chỉ lưu được dữ liệu kiểu json thôi ko lưu đc mấy object phức tạp
 
Nếu bạn sài socket tcp/udp thì send trực tiếp luôn, khỏi encode chi cho mệt.
 
Service chỉ cho gởi json thì base64 là chuẩn rồi. Decode ra thiếu dữ liệu là do code sai thôi. Còn có thể viết thêm api hoặc service khác thi có tỉ cách
 
gửi nguyên object luôn à thím, nhưng nguyên tắc muốn gửi object phức tạp đi thì phải implement cái serialization (trong java là thế), ngay cả cái redis hôm trước em test cũng chỉ lưu được dữ liệu kiểu json thôi ko lưu đc mấy object phức tạp
Redis nào lưu được json vậy :) thím chuyển object thành string và lưu redis bình thường nhé. Lúc get thì thêm bước unmarshal là được

Sent from vsmart Live via nextVOZ
 
Sao phải nghĩ phức tạp thế thím, về cơ bản thì muốn gửi gì thì cũng ở dạng cơ bản nhất là các bit đúng ko nào? Khéo cái service bác đang dùng mà chỉ cho json đó chỉ là high lever cho dễ dàng làm việc, cuối cùng vẫn phải chuyển về các bit để gửi đi trên mạng.
Ok. Kệ đi, giờ giả định service của bác chỉ gửi đc json, vậy lý do gì mà không thể convert 1 byte array thành json vì json có dạng array? 1 byte có value từ 0 - 254 vậy sao bác không nghỉ đơn giản là tạo 1 mảng trong json với các value là số từ 0 - 254.
 
Câu hỏi quan trọng nhất mình chưa thấy ai hỏi. Thớt đang dùng giao thức gì? Có phải HTTP ko?
 
gửi nguyên object luôn à thím, nhưng nguyên tắc muốn gửi object phức tạp đi thì phải implement cái serialization (trong java là thế), ngay cả cái redis hôm trước em test cũng chỉ lưu được dữ liệu kiểu json thôi ko lưu đc mấy object phức tạp

Đó là vì các object này cấu trúc rất rời rạc, kiểu như 2 nember liền nhau lại ở hai vị trí xa nhau trong bộ nhớ. Cho nên mới phải serialize để ép nó lại gần nhau.

Nhưng nếu ngay từ đầu đã tổ chức bộ nhớ sao cho sát nhau rồi, thì nguyên cả object sẽ chỉ nằm trong một đoạn bộ nhớ nhỏ, nên có thể gửi y nguyên cả đoạn này qua mạng, không phải serialize gì hết.

Sent from Xiaomi Redmi 5A using vozFApp
 
byte array vẫn chuyển về json đc mà :LOL:
c# có json.net chắc bên java có cái tương tự chứ
class DataSend {public byte[] Data{get;set;}} (mình xài c#)
Mà sao không code lại cái server (nếu bạn có quyền)
Chứ nodejs mình cũng từng code rồi, hỗ trợ nhận byte array mà (thực ra là stream, kiểu như upload file lên server ấy)
 
Sửa lần cuối:

Thống kê chủ đề

Ngày tạo
alexTVr1,
Người trả lời cuối
tqk2811,
Trả lời
13
Lượt xem
1.224
Quay lại
Lên đầu trang