由于最近需要用到socekt.io技术写一个项目,研究了一段时间,将自己在早期学习阶段写的小游戏改造成了一个比较完整的小游戏程序。点击此处体验游戏。建议使用手机模式查看。您也可以下载打包的webapp。安卓版已上线酷安市场。扫码下载体验:整个东西其实很简单,游戏界面用canvas绘制,AI算法来自沐讲网学习视频,在线对战使用socket.io实现实战-时间推送,完整代码已经开源,点击发送,喜欢就给个star吧,欢迎fork,也欢迎大家指出不足,提出建议。关于so??cket.io在我接触过的小型类库框架中,socket.io绝对是最牛逼的。只需几行代码就可以实现一个简单的聊天小程序。我一直在寻找机会将其应用到开发中。最近在写项目的时候刚好有个需求。在正式使用之前,我做了一点研究,写了一个小demo,在这里记录一些心得。什么是socket.ioSocket.IO是一个支持基于事件的实时双向通信的类库。它可以在任何平台、浏览器或设备上工作,并在可靠性和速度方面得到保证。它可以构建实时性强的应用程序。兼容性极佳,对不兼容的环境采用降级策略,最低支持IE5.5的浏览器。为什么使用socket.io,它是如何工作的,为什么它可以实现实时通信。要想了解socket.io,就得从网络基础学起。从轮询到websocket,我们先来看一个比较新的网络应用层协议:websocket。在传统的网络应用中,大部分场景都是使用http协议,那么有没有http不能处理或者不好处理的问题呢?考虑一个场景,如果服务端要向客户端推送消息,应该如何实现。http协议下,网络通信只能由客户端向服务器端发起。服务器不能主动向客户端推送消息。如果客户端想要从服务器接收消息,它必须不断地向服务器发送请求,这种方法称为轮询。轮询的开销非常大,因为无论有没有消息,客户端总是要向服务器询问,不仅效率低下,而且浪费资源。显然,这不是一个好的解决方案。还有一种长轮询。客户端发送请求后,等待服务器返回,然后建立新的连接。它还占用了不必要的资源。这一切的根源在于,如果没有客户端的请求,服务器是没有办法与客户端通信的。这是单向沟通的缺陷。我们需要一种技术,可以实现客户端和服务端的双向通信。Websocket就是为了解决这个问题而产生的,现在已经写入标准,主流浏览器基本都支持。Websocket也是建立在TCP之上的。请求协议是ws或者wss(加密),后面写的地址和http基本一样。像下面的ws://server.example.com/chat,这是一个websocket请求,请求头大概是这样的:GET/chatHTTP/1.1Host:server.example.comUpgrade:websocketConnection:UpgradeSec-WebSocket-key:x3JJHMbDL1EzLkh9GBhXDw==Sec-WebSocket-Protocol:chat,superchatSec-WebSocket-Version:13Origin:http://example.com看起来和http很像,因为握手阶段使用的是http协议,但是Upgrade相关的内容在请求中添加,对应信息如下:HTTP/1.1101SwitchingProtocolsUpgrade:websocketConnection:UpgradeSec-WebSocket-Accept:HSMrc0sMlYUkAGmm5OPpG2HaGWk=Sec-WebSocket-Protocol:聊天服务器也响应了Upgrade。这个时候跟http没有关系。协议升级后,双方建立了websocket连接。只建立一个连接,现在客户端和服务端可以在应用层实现全双工通信。整个过程如图:socket.io实现socket.io要实现双向通信,当然websocket是必不可少的技术了,但是socket.io不仅仅是对websocket的封装。在不支持websocket的环境下,socket.io也有多种轮询方案来保证其正常运行。Socket.io让看似复杂难实现的工作变得非常简单。它的API非常简单,在很多实时场景中非常有用。
