NodeJS貌似在一直升温。的确,从去年就一直开始关注NodeJS了,那个时候还是吴玺喆同学和我谈起这个事情~~~回头我就算变扫了一下,无非就是在服务器端运行的JS而已。使用JavaScript作为指令调用底层的C++,这个思维模式还是挺不错的,并且在服务器端执行的效果也非常理想。那个时候想养肥了再看看,结果不到半年时间NodeJs已经有了飞速的发展,各方面的组件,各方面的社区文章介绍都已经非常全面了。NodeJS并且已经退出了Windows版本的安装程序。极大的方便了开发者(之前是在Ubuntu环境下部署的)。
webSocket 是一个非常不错特性,与其说是Html5的功能,不如说是浏览器支持的功能。Html5只是一个规范草案,添加了canvas,header,footer,nav,silder等一系列更加优化的语义标签,而Geolocation,webSocket,localStore等都是浏览器厂商支持的结果。(概念不要混淆哦)正好趁着去学习的时间,做了一个NodeJS与webSocket的小例子。拿出来和各位共享一下。
webSocket 是 Html5 的一种新的协议。它实现了浏览器与服务器的双向通讯。webSocket API 中,浏览器和服务器端只需要通过一个握手的动作,便能形成浏览器与客户端之间的快速双向通道,使得数据可以快速的双向传播。
通过一次简单的握手,建立了客户端和服务器端的联系之后,服务器便可以主动推送信息给客户端,而不需要客户端的反复轮询请求。在之前已经有谷歌的工程师尝试使用iframe来实现次功能,具体细节这里就不谈了,请各位自行谷歌。
webSocket 服务器商用已经很多了,这里不用 php,java 而是使用最近热得发烫的 NodeJs 来作为案例解析。
安装了NodeJS之后,我们可以通过一行简单的插件命令来安装 socket 模块。
npm install socket
然后引入包和启动服务器代码。
var http = require('http'), io = require('socket.io'), fs = require('fs'); //配置 var config = { port : 8888 } //创建服务器,监听端口。 http = http.createServer(handler); http.listen(config.port); //创建webscoket监听服务器 io = io.listen(http); function handler(req, res) { fs.readFile(__dirname+'/client.html', function(err, data){ req.setEncoding(encoding="utf8"); res.writeHead(200); res.end(data); }); } io.sockets.on('connection',function(socket){ //定义事件 socket.on('msg',function(data){ socket.broadcast.emit('user message',data); }); });
然后我们来编写我们的客户端
<script src="http://192.168.39.154:8888/socket.io/socket.io.js"></script> <script type="text/javascript"> var socket = io.connect('http://192.168.39.154:8888/'); //Comet socket.on('user message', function(msg) { msgbox(msg.msg); }); //发送消息 function sendMsg() { var inpt = document.getElementById('txtInput'); var str = inpt.value; if(str.length==0){ inpt.className="error"; alert("请输入发送的消息内容"); return false; } inpt.className = ""; msgbox(str); //发送消息至服务器的Scoket。 socket.emit('msg', { msg : str }); console.log('[client]' + str); inpt.value = ""; inpt.focus(); }
以上就是核心源代码。完整的实例请下载附件。
源码下载:?NodeJSwebSocket
安装指令应是这样:
npm install socket.io