RTCPeerConnection: phương thức createDataChannel()
Baseline
Widely available
This feature is well established and works across many devices and browser versions. It’s been available across browsers since January 2020.
Phương thức createDataChannel() của giao diện RTCPeerConnection tạo một kênh mới được liên kết với máy ngang hàng từ xa, qua đó có thể truyền bất kỳ loại dữ liệu nào.
Điều này hữu ích cho nội dung kênh phụ như hình ảnh, truyền tệp, chat văn bản, gói cập nhật trò chơi, v.v.
Nếu kênh dữ liệu mới là kênh đầu tiên được thêm vào kết nối, việc thương lượng lại sẽ được bắt đầu bằng cách gửi sự kiện negotiationneeded.
Cú pháp
createDataChannel(label)
createDataChannel(label, options)
Tham số
label-
Tên dễ đọc cho kênh. Chuỗi này không được dài hơn 65.535 byte.
optionsOptional-
Đối tượng cung cấp các tùy chọn cấu hình cho kênh dữ liệu. Nó có thể chứa các trường sau:
orderedOptional-
Cho biết các thông điệp gửi trên
RTCDataChannelcó bắt buộc phải đến đúng thứ tự như lúc gửi (true) hay được phép đến không theo thứ tự (false). Mặc định:true. maxPacketLifeTimeOptional-
Số mili giây tối đa mà việc truyền một thông điệp có thể mất trong chế độ không đáng tin cậy. Mặc dù giá trị này là một số nguyên không dấu 16 bit, mỗi user agent có thể giới hạn nó xuống mức tối đa mà nó cho là phù hợp. Mặc định:
null. maxRetransmitsOptional-
Số lần tối đa mà user agent nên cố gắng truyền lại một thông điệp nếu lần đầu thất bại trong chế độ không đáng tin cậy. Mặc dù giá trị này là một số nguyên không dấu 16 bit, mỗi user agent có thể giới hạn nó xuống mức tối đa mà nó cho là phù hợp. Mặc định:
null. protocolOptional-
Tên của giao thức con được dùng trên
RTCDataChannel, nếu có; nếu không thì là chuỗi rỗng (""). Mặc định: chuỗi rỗng (""). Chuỗi này không được dài hơn 65.535 byte. negotiatedOptional-
Theo mặc định (
false), các kênh dữ liệu được thương lượng trong băng, nơi một bên gọicreateDataChannel, và bên kia lắng nghe sự kiệnRTCDataChannelEventbằng trình xử lý sự kiệnondatachannel. Ngoài ra (true), chúng có thể được thương lượng ngoài băng, nơi cả hai bên gọicreateDataChannelvới một ID đã thống nhất. Mặc định:false. idOptional-
ID số 16 bit cho kênh; giá trị hợp lệ là từ 0 đến 65534. Nếu bạn không bao gồm tùy chọn này, user agent sẽ chọn một ID cho bạn.
Note:
Các tùy chọn này đại diện cho tập con có thể đặt bằng script của các thuộc tính trên giao diện RTCDataChannel.
Giá trị trả về
Một đối tượng RTCDataChannel mới với label được chỉ định, được cấu hình bằng các tùy chọn trong options nếu tham số đó được bao gồm; nếu không, các giá trị mặc định được liệt kê ở trên sẽ được áp dụng.
Ngoại lệ
InvalidStateErrorDOMException-
Ném ra nếu
RTCPeerConnectionđã đóng. TypeError-
Ném ra trong các trường hợp sau:
- Chuỗi label và/hoặc protocol quá dài; chúng không được dài hơn 65.535 byte (byte chứ không phải ký tự).
idlà 65535. Mặc dù đây là một giá trị hợp lệ của số nguyên không dấu 16 bit, nó không phải là giá trị được phép choid.
SyntaxErrorDOMException-
Ném ra nếu cả
maxPacketLifeTimevàmaxRetransmitsđều được chỉ định. Bạn chỉ được phép chỉ định một trong hai giá trị này khácnull. ResourceInUseDOMException-
Ném ra nếu
idđã được chỉ định nhưng mộtRTCDataChannelkhác đang dùng cùng giá trị đó. OperationErrorDOMException-
Ném ra nếu
idđược chỉ định đã được dùng, hoặc nếu không chỉ địnhid, lớp WebRTC không thể tự động tạo ID vì tất cả ID đều đã được dùng.
Ví dụ
Ví dụ này cho thấy cách tạo một data channel và thiết lập trình xử lý cho các sự kiện open và message để gửi và nhận thông điệp trên đó (để ngắn gọn, ví dụ giả định onnegotiationneeded đã được thiết lập).
// Phía bên mời
const pc = new RTCPeerConnection(options);
const channel = pc.createDataChannel("chat");
channel.onopen = (event) => {
channel.send("Hi you!");
};
channel.onmessage = (event) => {
console.log(event.data);
};
// Phía bên trả lời
const pc = new RTCPeerConnection(options);
pc.ondatachannel = (event) => {
const channel = event.channel;
channel.onopen = (event) => {
channel.send("Hi back!");
};
channel.onmessage = (event) => {
console.log(event.data);
};
};
Ngoài ra, bạn có thể dùng thương lượng ngoài băng đối xứng hơn bằng một id đã thống nhất (ở đây là 0):
// Cả hai phía
const pc = new RTCPeerConnection(options);
const channel = pc.createDataChannel("chat", { negotiated: true, id: 0 });
channel.onopen = (event) => {
channel.send("Hi!");
};
channel.onmessage = (event) => {
console.log(event.data);
};
Để xem ví dụ kỹ hơn về cách thiết lập kết nối và kênh, xem Một mẫu RTCDataChannel đơn giản.
Thông số kỹ thuật
| Thông số kỹ thuật |
|---|
| WebRTC: Real-Time Communication in Browsers> # dom-peerconnection-createdatachannel> |