Socket.IO 简介

news/2024/7/19 9:57:01 标签: function, express, socket, websocket, button, login
官方站点: http://socket.io/
 
一篇可以参考的博客文章: http://www.cnblogs.com/fullhouse/archive/2011/07/18/2109936.html
 

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里配置),即可看到运行效果。
 
-------------------------------------------------------------------------------------------------
 
使用方面可以参考: http://socket.io/#how-to-use 说到底还是使用的node.js的技术,不了解的可以参考下边的文章:
 
http://blog.csdn.net/cnhome/article/details/6882953
http://blog.csdn.net/cnhome/article/details/6882973
 
 
官方的描述:
http://www.cnblogs.com/fullhouse/archive/2011/07/18/2109936.html
 
What is Socket.IO?

Socket.IO aims to make realtime apps possible in every          browser and mobile device, blurring the differences between the different          transport mechanisms. It's care-free realtime 100% in JavaScript.

Server

var io = require('socket.io').listen(80);

io.sockets.on('connection', function (socket) {
  socket.emit('news', { hello: 'world' });
  socket.on('my other event', function (data) {
    console.log(data);
  });
});

Client

<script src="/socket.io/socket.io.js"></script>
<script>
  var socket = io.connect('http://localhost');
  socket.on('news', function (data) {
    console.log(data);
    socket.emit('my other event', { my: 'data' });
  });
</script>

http://www.niftyadmin.cn/n/1054695.html

相关文章

传输密码加密方式

哈希散列 哈希散列并不能算是严格意义上的加密技术&#xff0c;因此我把它称为通用意义上的加密技术&#xff0c;哈希散列的通用定义是&#xff1a;通过一些不可逆的哈希算法将原本的明文内容转化为散列后的密文内容。 由于散列算法几乎不可逆&#xff0c;因此攻击者几乎无法通…

Java 动态字节码技术

对 Debug 的好奇 初学 Java 时&#xff0c;我对 IDEA 的 Debug 非常好奇&#xff0c;不止是它能查看断点的上下文环境&#xff0c;更神奇的是我可以在断点处使用它的 Evaluate 功能直接执行某些命令&#xff0c;进行一些计算或改变当前变量。 刚开始语法不熟经常写错代码&#…

HDU 4318 Power transmission(最短路)

http://acm.hdu.edu.cn/showproblem.php?pid4318 题意&#xff1a; 给出运输路线&#xff0c;每条路线运输时都会损失一定百分比的量&#xff0c;给定起点、终点和初始运输量&#xff0c;问最后到达终点时最少损失多少量。 思路&#xff1a; d[u]表示到达该点时剩余量的最大值…

整数相加溢出的解决办法:使用long

输入一个整数链表&#xff0c;求均值。别傻傻地认为直接遍历数组&#xff0c;做加法&#xff0c;然后输出均值就好了。需要考虑当输入的整数为Integer.MAX_VALUE时&#xff0c;直接将两个整数相加会产生溢出&#xff0c;需要使用Long保存sum。 public class AddAllNumber {publ…

怎么由DataSet将数据导入Excel

/// <summary>/// 将DataSet里所有数据导入Excel./// 需要添加COM: Microsoft Excel Object Library./// using Excel;/// </summary>/// <param name"filePath"></param>/// <param name"ds"></param>public static …

NodeJS与多核HTTP服务器

这两天一直在关注NodeJS,转一篇帖子&#xff1a;http://www.grati.org/?p307 简单地说&#xff0c;NodeJS是一个使用了Google高性能V8引擎 的服务器端JavaScript实现。它提供了一个&#xff08;几乎&#xff09;完全非阻塞I/O栈&#xff0c;与JavaScript提供的闭包和匿名函数相…

如何封装JDBC类?

1 package jdbcDome;2 3 import java.sql.Connection;4 import java.sql.DriverManager;5 import java.sql.ResultSet;6 import java.sql.SQLException;7 import java.sql.Statement;8 9 /**10 * JDBC工具类11 * author sunjian12 *13 */14 public class DBUtil {15 16…

【坑】new一个对象时,tostring报空指针异常

错误环境 java1.8.0_111 错误描述 对某vo进行了修改&#xff0c;属性类型由long修改为了Long&#xff0c;getter、setter没有修改类型 调用该对象的new方法时抛出npe 错误原因 没深究。。再补充 解决方案 修改getter、setter类型与属性一致即可 转载于:https://www.cnblogs.com…