OurJS


OurJS-我们的JS, 我们的技术-IT文摘; 专注JS相关领域;
我们热爱编程, 我们热爱技术;我们是高大上, 有品味的码农;

欢迎您订阅我们的技术周刊


我们会向您分享我们精心收集整理的,最新的行业资讯,技术动态,外文翻译,热点文章;
我们使用第三方邮件列表向您推送,我们不保存您的任何个人资料,注重您的隐私,您可以随时退订,

欢迎分享您的观点,经验,技巧,心得

让我们一起找寻程序员的快乐,探索技术, 发现IT人生的乐趣;


本网站使用缓存技术每次加载仅需很小流量, 可在手机中流畅浏览;
如果您发现任何BUG,请即时告知我们: ourjs(at)ourjs.com

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


分享到
分类 技术前沿   关键字 Html5   发布 kris  1417744190458
注意 转载须保留原文链接,译文链接,作者译者等信息。  
这是在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


社区评论 ( Beta版 )
  • #0 鲁牛弓 1417832849014

    这要是实现了Web得多强大啊,不过迟早有那一天,web王道啊

  • #1 邬过冰 1425112822632

    如此说来,有一天浏览器的某些部分运行在内核态咯?如果不运行在内核态,自己实现的协议栈有什么用呢,不通过内核态不可能跟网卡驱动程序对接。

  • #2 岳出忙 1434528627343

    @邬过冰 #1

    你自己写的程序也没见运行在内核态也能用socket

  • #3 颜圣乞 1447003625264

    @鲁牛弓 #0


  • #4 岑舌争 1457084853241

    计算机装个浏览器就行了!

  • #5 贺节训 1469888329691



  • #6 黄历舟 1482554741252

    @邬过冰 #1

    shadiao

OnceDoc 您自己的企业内容管理系统——文档、流程、知识库、报表、网盘All In One

访问404页面,寻找丢失儿童
 热门文章 - 分享最多
  1. NodeJS就是癌症[2011]
  2. NodeJS会是昙花一现吗?
  3. 提高NodeJS网站的安全性:Web服务器防黑客攻击技巧
  4. JavaScript的设计缺陷?浮点运算:0.1 + 0.2 != 0.3
  5. Debug调试Node.JS:我们是如何定位内存泄漏和无限循环的
  6. 理解JavaScript中的事件路由冒泡过程及委托代理机制
  7. 什么是IndexedDB:Web离线数据库入门简介及基础教程
  8. 基于HTML5和JavaScript实现的Winamp MP3播放器
  9. Node.JS编码规范指南教程:教你优雅地写JavaScript代码
  10. 一些你不知道的JavaScript Console调试命令
  11. AirJD-简单好用的免费建站工具

 相关阅读 - 技术前沿
  1. SpiderMonkey的JavaScript引擎[Firefox]性能超越V8[Chrome]
  2. 基于 Web 的 Go 语言 IDE
  3. Nginx的大计划:将原生支持JavaScript
  4. 不需要密码的登录
  5. 15个最好的HTML5前端响应式框架(2014)
  6. Go 语言基础教程:10分钟入门
  7. Docker究竟是什么,为什么这么流行,它的优点和缺陷有哪些?
  8. JavaScript有可能取代AppleScript成为OS X平台的默认编程脚本
  9. NodeBots-JavaScript在智能设备驱动(物联网)中的崛起
  10. 响应式设计在图片上的应用: 一个HTML元素如何让Web更快

 关键字 - Html5
  1. 用纯CSS实现的箭头
  2. 让Select选择框可编辑可输入可自动补全可下拉选择
  3. HTML5的TCP和UDP Web Socket API草案定稿
  4. 传统广告与H5广告的差别在哪里?
  5. WeMall微信商城源码插件代金券部分代码
  6. WeMall微信商城源码插件会员卡代码详情
  7. WeMall微信商城源码插件大转盘代码详情
  8. 你应该使用HTML5的header和footer标签吗?
  9. 5个实用Web界面设计工具 | 附开发案例
  10. 从PDF转换到HTML5的三种方法,你用过吗?

 欢迎订阅 - 技术周刊

我们热爱编程, 我们热爱技术; 我们是高端, 大气, 上档次, 有品味, 时刻需要和国际接轨的码农; 欢迎您订阅我们的技术周刊; 您只需要在右上角输入您的邮箱即可; 我们注重您的隐私,您可以随时退订.
加入我们吧! 让我们一起找寻码农的快乐,探索技术, 发现IT人生的乐趣;


 关注我们

我们的微信公众号: ourjs-com
打开微信扫一扫即可关注我们:
IT文摘-程序员(码农)技术周刊

ourjs官方微信号