Socket.IO 使用示例

jopen 12年前發布 | 50K 次閱讀 Socket.IO JavaScript開發

socket.io(官網:http://socket.io/)是一個跨平臺,多種連接方式自動切換,做即時通訊方面的開發很方便,而且能和 expressjs提供的傳統請求方式很好的結合,即可以在同一個域名,同一個端口提供兩種連接方式:request/response, websocket(flashsocket,ajax…).
下面是網摘的一個簡單的聊天室代碼。

server.js:

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

app.listen(8001);
app.get('/',function(req,res){
    var realpath = __dirname + '/client.html';
    //console.log(realpath);
    res.writeHead(200,{'Content-Type':mime.lookup(realpath)});
    res.end(fs.readFileSync(realpath));
});
app.get('/jquery.min.js',function(req,res){
    var realpath = __dirname + '/jquery.min.js';
    //console.log(realpath);
    res.writeHead(200,{'Content-Type':mime.lookup(realpath)});
    res.end(fs.readFileSync(realpath));
});
var getCurrTime = function(){
    var d  = new Date();
    return d.getFullYear()+'-'+(d.getMonth()+1)+'-'+d.getDate()+' '+d.getHours()+':'+d.getMinutes()+':'+d.getSeconds();
};
io.sockets.on('connection', function (socket) {
  socket.on('msg', function(msg){
     var data = {username:socket.name,time:getCurrTime(),msg:msg};
     socket.emit('msg',data);
     socket.broadcast.emit('msg',data);
  });
  socket.on('login', function(username){
     socket.name = username;
     var data = {username:'SYSTEM',time:getCurrTime(),msg:'welcome '+socket.name+' in...'};
     socket.broadcast.emit('msg',data);
     socket.emit('msg',data);
  });
  socket.on('logout', function(username){
     var data = {username:'SYSTEM',time:getCurrTime(),msg:'bye, '+socket.name+' leave...'};
     socket.broadcast.emit('msg',data);
     socket.emit('msg',data);
  });
  socket.on('disconnect', function () {
        socket.send(getCurrTime()+' '+socket.name+ " out...");
  });
});client.html: <script type="text/javascript" src="/jquery.min.js"></script>
<script type="text/javascript" src="/socket.io/socket.io.js"></script>
<script>
var url = window.location.protocol+'//'+window.location.host;
//alert(url);
var socket = io.connect(url);
socket.on('msg', function (data) {
showMsg(data);
});
var showMsg = function (data){};
$(function(){
showMsg = function(data){
var time = $('<span style="color:red;"></span>').html(data.time+'&nbsp;&nbsp;');
var username = $('<span style="color:blue;"></span>').html(data.username+'&nbsp;&nbsp;');
var say = $('<span style="color:black;"></span>').html('say:&nbsp;&nbsp;');
var msg = $('<span style="color:green;"></span>').text(data.msg);
var div = $('<div style="display:none;"></div>').append(time).append(username).append(say).append(msg);
div.insertAfter('#demo span:eq(0)').slideDown();//fadeIn();
//div.appendTo('#demo').fadeIn();
};
$('#butt_login').click(function(){
socket.emit('login',$('#username').val());
});
$('#butt_logout').click(function(){
socket.emit('logout',$('#username').val());
});
$('#butt_send').click(function(){
socket.emit('msg',$('#message').val());
});
});

</script>
Name: <input type="text" id='username' value=""/>
<input type="button" value="join" id="butt_login"/>
<input type="button" value="leave" id="butt_logout"/>
<br>
message: <input type="text" id='message' value=""/>
<input type="button" value="send" id="butt_send"/>
<div id='demo' style="boder:1px;border-style:dotted;width:800px;height:300px;overflow:auto;">
<span>...</span>
</div>  Tips: 1.確認tmp/foo/路徑下已有jquery.min.js,如果沒有,需要創建一個該文件;
2.確認已安裝mime,安裝方法:# npm install mime;
3.由于socket.io.js文件中會要求flash player版本》10.0;請確保此項要求滿足。
Demo運行方法:# node server.js     開啟瀏覽器輸入localhost:8001(端口號可在server.js里配置),即可看到運行效果。
 本文由用戶 jopen 自行上傳分享,僅供網友學習交流。所有權歸原作者,若您的權利被侵害,請聯系管理員。
 轉載本站原創文章,請注明出處,并保留原始鏈接、圖片水印。
 本站是一個以用戶分享為主的開源技術平臺,歡迎各類分享!