默认
发表评论 9
想开发IM:买成品怕坑?租第3方怕贵?找开源自已撸?尽量别走弯路了... 找站长给点建议
Socket.IO介绍:支持WebSocket、用于WEB端的即时通讯的框架
阅读(125817) | 评论(9 收藏3 淘帖1 4

1、基本介绍


WebSocket是HTML5的一种新通信协议,它实现了浏览器与服务器之间的双向通讯。

而Socket.IO是一个完全由JavaScript实现、基于Node.js、支持WebSocket的协议用于实时通信、跨平台的开源框架,它包括了客户端的JavaScript和服务器端的Node.js。Socket.IO除了支持WebSocket通讯协议外,还支持许多种轮询(Polling)机制以及其它实时通信方式,并封装成了通用的接口,并且在服务端实现了这些实时机制的相应代码。Socket.IO实现的Polling通信机制包括Adobe Flash Socket、AJAX长轮询、AJAX multipart streaming、持久Iframe、JSONP轮询等。Socket.IO能够根据浏览器对通讯机制的支持情况自动地选择最佳的方式来实现网络实时应用。当前,Socket.IO最新版本是于2015年1月19日发布的1.3.0版本,该版本增强了稳定性和提高了性能,并修复了大量Bug。

Socket.IO设计的目标是构建能够在不同浏览器和移动设备上良好运行的实时应用,如实时分析系统、二进制流数据处理应用、在线聊天室、在线客服系统、评论系统、WebIM等。目前,Socket.IO已经支持主流PC浏览器(如IE、Safari、Chrome、Firefox、Opera等)和移动平台上的浏览器(iOS平台下的Safari、Android平台下的基于Webkit的浏览器等)。

Socket.IO已经具有众多强大功能的模块和扩展API,如(session.socket.io)(http session中间件,进行session相关操作)、socket.io-cookie(cookie解析中间件)、session-web-sockets(以安全的方式传递Session)、socket-logger(JSON格式的记录日志工具)、websocket.MQ(可靠的消息队列)、socket.io-mongo(使用MongoDB的适配器)、socket.io-redis(Redis的适配器)、socket.io-parser(服务端和客户端通讯的默认协议实现模块)等。

Socket.IO实现了实时、双向、基于事件的通讯机制,它解决了实时的通信问题,并统一了服务端与客户端的编程方式。启动了Socket以后,就像建立了一条客户端与服务端的管道,两边可以互通有无。它还能够和Express.js提供的传统请求方式很好的结合,即可以在同一个域名,同一个端口提供两种连接方式:
request/response, websocket(flashsocket,ajax…).

2、更多资料


Web端即时通讯新手入门贴:
新手入门贴:详解Web端即时通讯技术的原理

Web端即时通讯技术盘点请参见:
Web端即时通讯技术盘点:短轮询、Comet、Websocket、SSE

关于Ajax短轮询:
找这方面的资料没什么意义,除非忽悠客户,否则请考虑其它3种方案即可。

有关Comet技术的详细介绍请参见:

有关WebSocket的详细介绍请参见:

有关SSE的详细介绍文章请参见:
SSE技术详解:一种全新的HTML5服务器推送事件技术

更多WEB端即时通讯文章请见:
http://www.52im.net/forum.php?mod=collection&action=view&ctid=15

3、简单示例


搭建Socket.IO环境需要先创建一个作为工作空间的目录,然后安装Node.js,并在工作空间下安装Socket.IO(命令:npm install socket.io),这样环境已经搭建完成。还可以安装基于Node.js框架(如Express.js等)以协助应用的服务器端开发。

服务器端示例代码如下:
var io = require('socket.io').listen(8080);
io.sockets.on('connection', function (socket) {
socket.emit('news', { hello: 'world' });
socket.on('my other event', function (data) {
console.log(data);
});
});

客户端示例代码如下:
<script src="socket.io.min.js"></script>
<script>
  var socket = io.connect('http://localhost:8080');
  socket.on('news', function (data) {
    console.log(data); 
    socket.emit('my other event', { my: 'data' });
  });
</script>

4、分发授权


Socket.IO由网页程序设计公司Automattic使用JavaScript开发并基于MIT开源协议发布。

此外,社区开发者还为Socket.IO开发了一些开源插件/功能库,如:

  • 1)Socket.IO 1.x系列版本的Java客户端Socket.IO-client.java,该功能库可以用于Android的相关应用中;
  • 2)用于Socket.IO与iOS应用间进行通信的简单接口SIOSocket
  • 3)基于Netty的Socket.IO服务器端的Java实现Netty-socketio

有关Socket.IO更多相关信息,读者可以登录其官网或者托管在GitHub的主页站点查看。

附录:更多WEB端即时通讯技术文章


新手入门贴:史上最全Web端即时通讯技术原理详解
Web端即时通讯技术盘点:短轮询、Comet、Websocket、SSE
SSE技术详解:一种全新的HTML5服务器推送事件技术
Comet技术详解:基于HTTP长连接的Web端实时通信技术
新手快速入门:WebSocket简明教程
WebSocket详解(一):初步认识WebSocket技术
WebSocket详解(二):技术原理、代码演示和应用案例
WebSocket详解(三):深入WebSocket通信协议细节
WebSocket详解(四):刨根问底HTTP与WebSocket的关系(上篇)
WebSocket详解(五):刨根问底HTTP与WebSocket的关系(下篇)
WebSocket详解(六):刨根问底WebSocket与Socket的关系
socket.io实现消息推送的一点实践及思路
LinkedIn的Web端即时通讯实践:实现单机几十万条长连接
Web端即时通讯技术的发展与WebSocket、Socket.io的技术实践
Web端即时通讯安全:跨站点WebSocket劫持漏洞详解(含示例代码)
开源框架Pomelo实践:搭建Web端高性能分布式IM聊天服务器
使用WebSocket和SSE技术实现Web端消息推送
详解Web端通信方式的演进:从Ajax、JSONP 到 SSE、Websocket
MobileIMSDK-Web的网络层框架为何使用的是Socket.io而不是Netty?
理论联系实际:从零理解WebSocket的通信原理、协议格式、安全性
微信小程序中如何使用WebSocket实现长连接(含完整源码)
八问WebSocket协议:为你快速解答WebSocket热门疑问
快速了解Electron:新一代基于Web的跨平台桌面技术
一文读懂前端技术演进:盘点Web前端20年的技术变迁史
Web端即时通讯基础知识补课:一文搞懂跨域的所有问题!
Web端即时通讯实践干货:如何让你的WebSocket断网重连更快速?
WebSocket从入门到精通,半小时就够!
WebSocket硬核入门:200行代码,教你徒手撸一个WebSocket服务器
长连接网关技术专题(四):爱奇艺WebSocket实时推送网关技术实践
网页端IM通信技术快速入门:短轮询、长轮询、SSE、WebSocket
>> 更多同类文章 ……

(原文链接:http://www.infoq.com/cn/news/2015/01/socket-io-websocket/

即时通讯网 - 即时通讯开发者社区! 来源: - 即时通讯开发者社区!

上一篇:实践总结:Netty3.x VS Netty4.x的线程模型下一篇:同网段的条件下,怎么设置,服务端才能与客户端通信?

本帖已收录至以下技术专辑

推荐方案
评论 9
您好,我想问个问题

文章开头说,socketio支持一整套实时通信方式的实现,包括websocket,
后续看到socketio服务端,我有点傻了,那么是不是前端使用了socketio开发,后端直接使用nodejs比较好

如果想以后端netty作为核心,那么前端要使用socketjs的话,要直接砍去socketjs的很多功能,保留websocket的一部分功能(因为我只会前端的websocket)

一个netty Java后端,想开发一个webIM项目,正在找资料学习im
引用:WarriorFromLong 发表于 2020-12-10 20:03
您好,我想问个问题

文章开头说,socketio支持一整套实时通信方式的实现,包括websocket,

我写的这篇《MobileIMSDK-Web的网络层框架为何使用的是Socket.io而不是Netty?》,应该能解决你的疑惑。
引用:JackJiang 发表于 2020-12-10 20:37
我写的这篇《MobileIMSDK-Web的网络层框架为何使用的是Socket.io而不是Netty?》,应该能解决你的疑惑。

谢谢大佬,那篇文章几周前看过
再次看了一遍,我的感想是,前端继续使用socket.io,但是只用它websocket的部分,其他地方不使用。
我仍然以 后端netty作为核心。
引用:WarriorFromLong 发表于 2020-12-10 20:59
谢谢大佬,那篇文章几周前看过
再次看了一遍,我的感想是,前端继续使用socket.io,但是只用它websocket ...

你的业务场景主要是做什么?客服系统?
引用:JackJiang 发表于 2020-12-10 21:16
你的业务场景主要是做什么?客服系统?

您好

目前业务场景类似,但是后期说不准会加人,孵化成web,pc,手机
引用:WarriorFromLong 发表于 2020-12-10 22:23
您好

目前业务场景类似,但是后期说不准会加人,孵化成web,pc,手机

老板开多少工资操多少心,别想的太远。。
引用:JackJiang 发表于 2020-12-10 22:25
老板开多少工资操多少心,别想的太远。。

哈哈哈哈,好的。谢谢。

所以仅仅是webim,,,那就是socketio的webscoket模块,+ netty了吗,netty为主,毕竟我们组都是Java,前端vue都是几个后端琢磨一下写的。
引用:WarriorFromLong 发表于 2020-12-11 09:28
哈哈哈哈,好的。谢谢。

所以仅仅是webim,,,那就是socketio的webscoket模块,+ netty了吗,netty为 ...

socket.io也有java版的服务端,叫 netty-socketio
引用:JackJiang 发表于 2020-12-11 11:33
socket.io也有java版的服务端,叫 netty-socketio

毕竟还是有点虚的。。。。。
不清楚,Nikita Koksharov 的背景
打赏楼主 ×
使用微信打赏! 使用支付宝打赏!

返回顶部