HTML5 WebSocket + NodeJs 实现聊天室

WebSocket技术的加入在浏览器中实现了和服务器端的双向通信。在这里我选择NodeJs作为服务器端,与WebSocket技术结合起来,实现浏览器与服务器端的双向通信。

首先,需要通过下面这条命令在nodeJs中安装websocket模块:

npm install socket

安装完成之后开始编写我们服务器端代码server.js。

var http    = require('http'),
    io      = require('socket.io'),
    fs      = require('fs');
 
//配置
varconfig = {
    port :8888
}
 //创建服务器,监听端口。
http = http.createServer(handler);
http.listen(config.port);
//创建webscoket监听服务器
io = io.listen(http);
 
functionhandler(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);
    });
});


代码中先导入了socket.io包,然后设置监听端口,最后通过io.sockets.on方法监听服务器端与浏览器的连接,并在服务器端与浏览器握手完成后通过回调函数调用socket.on方法来监听服务器端发来的消息。


下面是浏览器端的实现client.html:

<script src="http://172.18.48.159:8888/socket.io/socket.io.js"></script>
        <script type="text/javascript">
            varsocket = io.connect('http://172.18.48.159:8888/');
            //Comet
            socket.on('user message',function(msg) {
                msgbox(msg.msg);
            });
            //发送消息
            functionsendMsg() {
                varinpt = document.getElementById('txtInput');
                varstr = inpt.value;
                if(str.length==0){
                    inpt.className="error";
                    alert("请输入发送的消息内容");
                    returnfalse;
                }
                inpt.className ="";
                msgbox(str);
                //发送消息至服务器的Scoket。
                socket.emit('msg', {
                    msg : str
                });
                console.log('[client]'+ str);
                inpt.value ="";
                inpt.focus();
            }
            functionmsgbox(str) {
                varbox = document.getElementById('box');
                box.innerHTML += str +'<br>';
            }
            window.onload =function(){
                document.body.onkeypress =function(event){
                    vare = window.event || event;
                    if(e.keyCode==13){
                        sendMsg();
                    }
                }
            }
        </script>


在页面中首先需要导入socket.io.js模块,这个模块文件是放在nodejs服务器目录下的,所以需要通过ip去获取。

之后通过io.connect(//服务器ip+端口)方法让客户端与服务器端连接握手。

同样的,通过socket.on方法监听来自服务器端的消息。

通过socket.emit方法向服务器端发送数据。在这里使用的是广播机制,所以所有的客户端都会收到消息。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值