HTML5的TCP和UDP Web Socket API草案定稿_最新动态_新闻资讯_程序员俱乐部

中国优秀的程序员网站程序员频道CXYCLUB技术地图
热搜:
更多>>
 
您所在的位置: 程序员俱乐部 > 新闻资讯 > 最新动态 > HTML5的TCP和UDP Web Socket API草案定稿

HTML5的TCP和UDP Web Socket API草案定稿

 2014/12/5 17:08:16    程序员俱乐部  我要评论(0)
  • 摘要:这是在Web上实现UDP/TCPAPI的草案,沿未形成标准。该标准的一大亮点就是使用内置Promise设计模式,替代了传统JavaScript中的事件触发回调。不过各大浏览器厂商会不会这样实现还要打一个问号,毕竟编写标准的学院派和实现标准的行业派很难达到完全统一。以下内容来自:http://www.w3.org/TR/2014/WD-tcp-udp-sockets-20141202/接口标准提供对原始UDP套接字(Socket),TCP客户端套接字和TCP服务器套接字API的定义
  • 标签:API Web HTML5 socket
class="topic_img" alt=""/>

  这是在 Web 上实现 UDP/TCP API 的草案,沿未形成标准。该标准的一大亮点就是使用内置 Promise 设计模式,替代了传统 JavaScript 中的事件触发回调。不过各大浏览器厂商会不会这样实现还要打一个问号,毕竟编写标准的学院派和实现标准的行业派很难达到完全统一。

  以下内容来自: http://www.w3.org/TR/2014/WD-tcp-udp-sockets-20141202/

  接口标准提供对原始 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

上一篇: LTBounceSheetDemo(仿退出登录) 下一篇: 没有下一篇了!
发表评论
用户名: 匿名