使用nodejs express + socket.io + jquery 制作一个极简单的聊天服务器

文件:
jquery-1.7.1.min.js
socket.io.js
client.js

node.js  (放到与public同级的目录下)
index.html

 

文件结构:

 

注意:本地IP是192.168.145.10

 

 

index.html

    <html>  
      <head>  
        <script src="./public/jquery-1.7.1.min.js"></script>  
        <script src="./public/socket.io/node_modules/socket.io-client/dist/socket.io.js"></script>  
        <script src="./public/client.js"></script>  
        <style type="text/css">  
          #content { width: 600px; margin: 0 auto; }  
          textarea { width: 400px; height: 40px;}  
        </style>  
        <script>  
          $(document).ready(function() {  
             initialize();  
          });  
        </script>  
      </head>  
      <body>  
        <div id="content">  
          <h1>Micro Chat</h1>  
          <div id="status"></div>  
          <div id="thread">  
          </div>  
          <div>  
            <textarea id="text" name="text"></textarea>  
          </div>  
          <div>  
            <button id="send" οnclick="say();">Send</button>  
          </div>  
        </div>  
      </body>  
    </html>  
 

 

 

node.js

 

var express = require('express');

var app = express.createServer();
var io = require('socket.io').listen(app);


app.configure(function(){
    app.use(express.bodyParser());
    app.use(express.methodOverride());
    app.use(express.logger());
    app.use(express.bodyParser());
    app.use(express.cookieParser());
    app.use(express.session({
        secret:"sdfsdfsdfjkdsf",
    }));
});

var conns = {};

io.sockets.on('connection',function(socket){
    var cid = socket.id;

    for(var ccid in conns){
        var soc = conns[ccid];
        soc.emit('join',{cid:socket.id});
    }

    conns[cid] = socket;

    socket.on('disconnect',function(){
        delete conns[cid];

        for(var cid in conns) {
            var soc = conns[cid];
            soc.emit('quit',{cid:cid});
        }

    });

    socket.on('say',function(data){
        data.cid = cid;
        for(var ccid in conns){
            var soc = conns[ccid];
            soc.emit('broadcast',data);
        }

    });
});

app.get('/',function(req,res){
    res.sendfile(__dirname + '/public/index.html');
});

app.use('/public',express.static(__dirname + '/public'));

app.listen(3000);

console.log('daemon start on http://192.168.145.10:3000');

 

 

client.js

 

var socket = io.connect("http://192.168.145.10:3000");

socket.on('quit',function(data){
    status('Client' + data.cid + 'quits!');
});

socket.on('join',function(data){
    status('Client' + data.cid + 'joins!');
});

socket.on('broadcast',function(data){
    $('#thread').append($('<div>').html('client' + data.cid + ' say:<br/>' + data.w));
});

function say() {
    var words = $('#text').val();

    if ($.trim(words)) {
        socket.emit('say',{w:words});
        $('#text').val('');
    }
}

function status(w) {
    $('#status').html(w);
}

function initialize() {
    $(document).delegate('textarea','keydown',function(evt){
        if (evt.keyCode == 13 && evt.ctrlKey) {
            $('#send').focus().click();
        }
    });
}
 

 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值