新版 NodeJS与webSocket

2013-07-10 00:00:00 by 【6yang】, 1541 visits, 收藏 | 返回

NodeJS与webSocket

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 模块。

sudo npm install socket.io

然后引入包和启动服务器代码。

var http    = require('http'),
    io      = require('socket.io'),
    fs      = require('fs');

//配置
var config = {
    port : 8888,
    ip : "127.0.0.1"
}
 //创建服务器,监听端口。
http = http.createServer(handler);
http.listen(config.port, config.ip);
//创建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();
}

以上就是核心源代码。完整的实例请下载附件。
http://www.qcoke.com/?p=1023

源码下载: NodeJSwebSocket

分享到:
share

    图片原图

    loading

    loading