這是在Web上實現UDP/TCP API的草案,沿未形成標准。該標准的一大亮點就是使用內置Promise設計模式,替代了傳統JavaScript中的事件觸發回調。不過各大瀏覽器廠商會不會這樣實現還要打一個問號,畢竟編寫標准的學院派和實現標准的行業派很難達到完全統一。
接口標准提供對原始UDP套接字(Socket),TCP客戶端套接字和TCP服務器套接字API的定義。
簡介
這部分沿未形成規范。您可以使用該API來發送和接收數據,並使用TCP或UDP網絡。
使用此API的部分用例:
- 能夠與SMTP, POP3 和 IMAP 服務器進行通信的郵件服務器。
- 一個能與IRC服務器進行通信的IRC客戶端 (注* IRC是一種通過網絡的即時聊天方式。其主要用於群組聊天。)
- 實現一個SSH應用程序
- 與現有的消費硬件產品進行通信,如互聯網電視
- 游戲服務器
- 端到端應用程序(注* P2P或對等網絡應用)
- 本地網絡多播服務(multicast service)發掘,例如UPnP/ SSDP和mDNS
一個UDP的例子:
// // This example shows a simple implementation of UPnP-SSDP M-SEARCH // discovery using a multicast UDPSocket // var address = '239.255.255.250', port = '1900', serviceType = 'upnp:rootdevice', rn = '\r\n', search = ''; // Create a new UDP client socket var mySocket = new UDPSocket(); // Build an SSDP M-SEARCH multicast message search += 'M-SEARCH * HTTP/1.1' + rn; search += 'ST: ' + serviceType + rn; search += 'MAN: "ssdp:discover"' + rn; search += 'HOST: ' + address + ':' + port + rn; search += 'MX: 10'; // Receive and log SSDP M-SEARCH response messages function receiveMSearchResponses() { // While data in buffer, read and log UDP message while (mySocket.readable.state === "readable") { var msg = mySocket.readable.read(); console.log ('Remote address: ' + msg.remoteAddress + ' Remote port: ' + msg.remotePort + 'Message: ' + ab2str(msg.data)); // ArrayBuffer to string conversion could also be done by piping // through a transform stream. To be updated when the Streams API // specification has been stabilized on this point. } // Wait for SSDP M-SEARCH responses to arrive mySocket.readable.wait().then( receiveMSearchResponses, e => console.error("Receiving error: ", e); ); } // Join SSDP multicast group mySocket.joinMulticast(address); // Send SSDP M-SEARCH multicast message mySocket.writeable.write( {data : str2ab(search), remoteAddress : address, remotePort : port }).then( () => { // Data sent sucessfully, wait for response console.log('M-SEARCH Sent'); receiveMSearchResponses(); }, e => console.error("Sending error: ", e); ); // Log result of UDP socket setup. mySocket.opened.then( () => { console.log("UDP socket created sucessfully"); }, e =>console.error("UDP socket setup failed due to error: ", e); ); // Handle UDP socket closed, either as a result of the application // calling mySocket.close() or an error causing the socket to be closed. mySocket.closed.then( () => { console.log("Socket has been cleanly closed"); }, e => console.error("Socket closed due to error: ", e); );
相比UDP,TCP的示例代碼顯得簡單一些
// // This example shows a simple TCP echo client. // The client will send "Hello World" to the server on port 6789 and log // what has been received from the server. // // Create a new TCP client socket and connect to remote host var mySocket = new TCPSocket("127.0.0.1", 6789); // Send data to server mySocket.writeable.write("Hello World").then( () => { // Data sent sucessfully, wait for response console.log("Data has been sent to server"); mySocket.readable.wait().then( () => { // Data in buffer, read it console.log("Data received from server:" + mySocket.readable.read()); // Close the TCP connection mySocket.close(); }, e => console.error("Receiving error: ", e); ); }, e => console.error("Sending error: ", e); ); // Signal that we won't be writing any more and can close the write half of the connection. mySocket.halfClose(); // Log result of TCP connection attempt. mySocket.opened.then( () => { console.log("TCP connection established sucessfully"); }, e =>console.error("TCP connection setup failed due to error: ", e); ); // Handle TCP connection closed, either as a result of the application // calling mySocket.close() or the other side closed the TCP // connection or an error causing the TCP connection to be closed. mySocket.closed.then( () => { console.log("TCP socket has been cleanly closed"); }, e => console.error("TCP socket closed due to error: ", e); );
有什么問題可在Github上面給他們開Issues:, 不過關注者廖廖(14個star目前): https://github.com/sysapps/tcp-udp-sockets/issues