xin chào tôi đang cố chuyển tệp. Tôi có một số chương trình chuyển đổi tập tin sang nhị phân và chuyển chúng qua mạng với C++. Tôi đã tự hỏi nếu tôi sẽ có thể chuyển các tập tin với javascripts và websockets? bất kỳ ví dụ về cách tích hợp chương trình C++ của tôi vào javascript sẽ được đánh giá cao. cảm ơn.chuyển tệp bằng javascript qua websockets
Trả lời
Javascript có hai loại nhị phân mới: mảng gõ (arraybuffers) và Blobs (về cơ bản tập tin).
WebSockets hỗ trợ gửi và nhận mảng và đốm được nhập.
Để truyền dữ liệu giữa hai trình duyệt bằng cách sử dụng WebSockets, bạn sẽ cần một máy chủ cho cả hai trình duyệt để kết nối với (trình duyệt WebSocket hỗ trợ là máy khách chỉ vào thời điểm này).
Nếu bạn có một máy chủ hiện có trong C++ xử lý việc truyền tải tệp thì bạn sẽ có thể thêm hỗ trợ máy chủ WebSocket vào nó một cách dễ dàng. Bạn có thể tìm WebSocket client và server triển khai trên trang này: http://en.wikipedia.org/wiki/Comparison_of_WebSocket_implementations
Trong hoạt Javascript để thiết lập kết nối đến một máy chủ WebSocket bạn làm điều gì đó như thế này:
ws = new WebSocket("ws://100.101.102.103");
Các send() phương pháp hỗ trợ chuỗi bình thường, gõ mảng hoặc đốm màu. Việc gửi các mảng đã nhập và các đốm màu sẽ dẫn đến khung (frame) mà máy chủ nhận được dưới dạng các khung nhị phân (opcode = 2).
ws.send(myTypedArray);
Tiếp nhận tin nhắn mà bạn đăng ký một handler nhắn:
ws.onmessage = function (evt) {
console.log("Got ws message: " + evt.data);
};
Nếu máy chủ sẽ gửi một khung nhị phân/tin nhắn sau đó tài sản dữ liệu onmessage của sự kiện này sẽ chứa hoặc một mảng đánh máy hoặc blob tùy thuộc vào cài đặt thuộc tính binaryType. Bạn có thể thay đổi loại dữ liệu nhị phân được nhận như sau:
ws.binaryType = "blob"; // or "arraybuffer"
Điều bạn đang cố gắng làm là không thể. WebSocket chỉ có thể hoạt động ở chế độ khách hàng; nó không thể chấp nhận các kết nối từ một máy khách WebSocket khác (chẳng hạn như một trình duyệt khác).
Có thể nối các máy khách WebSocket với nhau thông qua một máy chủ, nhưng tại thời điểm đó nó không còn thực sự ngang hàng nữa, vì vậy tôi không chắc liệu nó thực sự hữu ích hay thú vị nữa.
cảm ơn, nếu bạn có thể cung cấp các ví dụ về cách làm điều đó thông qua một máy chủ, nó sẽ được đánh giá cao. =) – DasBoot
Tôi cũng quan tâm nếu điều này là có thể. – DasBoot