实时通信框架 Socket.IO

主要内容: 1. Socket.IO 是什么?有什么特点 2. 实际应用的案例 3. 动手开发一个小示例

Socket.IO 简介

Socket.IO 可以实现实时双向基于事件的通信,专注于速度和可靠性,官方称其是最快的和最可靠的实时引擎

Socket.IO 支持非常全面的通信机制,包括 :

  • WebSocket
  • Adobe Flash Socket
  • AJAX长轮询
  • AJAX multipart streaming
  • 持久Iframe
  • JSONP轮询

Socket.IO 根据浏览器的支持情况自动选择最佳方式

Socket.IO 完全由JavaScript实现,基于Node.js,浏览器中引用Socket.IO的JS文件,服务器中使用Node.js创建一个server,只需很少的代码就可以实现实时通信

Socket.IO 有很丰富的扩展,例如 :

  • Netty-socketio java 版本的Socket.IO server
  • socket.io-client-javajava客户端实现,可用于Android
  • SIOSocket iOS客户端实现
  • socket.io-mongoMongoDB的适配器
  • socket.io-redis Redis的适配器

应用案例

浏览器中的 Linux 终端 - tty.js

tty.js 可以让我们在页面中操作Linux服务器,就像使用正常的SSH客户端一样实时执行命令

tty.js就是基于 socket.io 实现,体验非常顺畅,也很稳定

起步实践

目标

在页面中实时动态显示server的时间

实现

安装 socket.io

npm install socket.io

服务器端代码 server-clock.js

var app = require('express')();
var http = require('http').Server(app);
var io = require('socket.io')(http);

app.get('/', function(req, res){
  res.sendfile('server-clock.html');
});

io.on('connection', function(socket){
  console.log('a user connected');
});

function tick(){
    var now = new Date().toUTCString();
    io.emit('time', now);
}

setInterval(tick, 1000);

http.listen(3000, function(){
  console.log('listening on *:3000');
});

客户端代码 server-clock.html

<script src="/socket.io/socket.io.js"></script>
<script>
  var socket = io();
  socket.on('time', function (time){
    document.getElementById('time').innerHTML = time;
  });
</script>

<body>
Current server time is: 
<b><span id="time"></span></b> 
</body>

测试

启动

node server-clock.js

浏览器中访问

http://localhost:3000/

效果

小结

socket.io 的应用非常广泛,很可靠,如果有实时通信的需求,可以考虑下

官网地址:http://socket.io

本文分享自微信公众号 - 性能与架构(yogoup)

原文出处及转载信息见文内详细说明,如有侵权,请联系 yunjia_community@tencent.com 删除。

原始发表时间:2017-01-06

本文参与腾讯云自媒体分享计划,欢迎正在阅读的你也加入,一起分享。

发表于

我来说两句

0 条评论
登录 后参与评论

相关文章

来自专栏PHP技术大全

grafana+ prometheus+php 监控系统实践

团队在开发流媒体服务,需要实现一个监控在线人数的功能,可以看到历史有多少人在线,当前有多少人在线的功能。 如果用mysql等关系型数据库来实现,可以用事件记录日...

36630
来自专栏菩提树下的杨过

IntelliJ IDEA 13试用手记(附详细截图)

从去年开始转java以来,一直在寻找一款趁手的兵器,eclipse虽然是很多java程序员的首选,但是我发现一旦安装了一些插件,workspace中的项目达到数...

13730
来自专栏Fiona的杂货铺

自媒体分享计划加入教程

1. 点击【腾讯云自媒体分享计划】网址:https://cloud.tencent.com/developer/support-plan

746200
来自专栏魏艾斯博客www.vpsss.net

快云小助手网页版 Linux 面板安装过程记录

前几天老魏在快云小助手(快云管理助手)windows 服务器快速部署 web 环境中提到了体验景安快云提供的 web 面板,可以提供简单的服务器管理功能,同时老...

54370
来自专栏知晓程序

开发 | 一篇文章,带你从 0 到 1 开发小程序插件

14430
来自专栏知晓程序

知晓云 | 5 分钟实现小程序模板消息推送,你可以这样做

但是,有了知晓云,你不用再头疼如何开发模板消息模块。只需要几步简单的操作,就可以轻松实现模板消息推送。

41320
来自专栏desperate633

浅谈web开发中的Get和Post方法get和post的区别

在http协议中,实际上有八个http方法。但在实际开发中,绝大多数情况我们只会用到两个方法,就是get和post。所以我们来稍微谈谈两种方法的区别,以及何时应...

31020
来自专栏進无尽的文章

Fastlane| 一句代码完成自动打包发布到蒲公英

第一个选项的意思是:自动截屏。这个功能能帮我们自动截取APP中的截图,并添加手机边框(如果需要的话) 第二个选项的意思是:自动发布beta版本用于TestFli...

23030
来自专栏我与狸奴不出门

基于CentOS搭建微信小程序--响应错误502

在腾讯云开发者实验室的搭建微信小程序中  ,遇到了在完成实验二会话部署失败后,实验一http访问测试也显示失败并且表示响应错误-错误码:502。(域名是可以正常...

32630
来自专栏一“技”之长

获取iOS应用的URL Schemes 原

3、打开iTunes,查看应用程序,选中相应的应用程序点击右键,选择在Finder中显示,然后解压ipa文件,得到一个文件夹。

13330

扫码关注云+社区

领取腾讯云代金券