socket实现微型聊天室
用法
$ npm install socket.io
客户端:
<script src="/socket.io.js"></script>
var socket = io('你的网络地址以及端口号');//如:http://10.80.13.200:3002
socket.emit('msg',{data:value,time:shijian});//向服务器发送
socket.on('back',function(data){
<!--接收服务器响应信息,这里写接收信息后的处理代码-->
});
注意:服务器端接受的事件名要和客户端发送的事件名一致,反过来同理!
服务器端:
var http = require('http);
var fs = require('fs); //文件系统
var server = http.creaServer(handle).lestin(3002);
var io = require('socket.io)(server);
function handle(req,res){
fs.readFile(__dirname+'/index.html','utf-8',funtion(err,data){
if(err){
res.writeHead(500);
res.end("出错啦!");
}
res.writeHead(200);
res.end(data);
})
}
<!--用户进入后执行的回调函数-->
io.on("connection",function(socket){
socket.emit('back',{message:"success"});
socket.on('msg',function(data){
console.log(data);//数据处理代码
});
})
简易聊天室 完整代码
index.html
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<title>聊天室</title>
<link rel="stylesheet" href="../css/index.css">
<script src="socket.io/socket.io.js"></script>
</head>
<body>
<div class="box">
<p>欢迎留言! 在线人数<span>0</span></p>
<ul>
</ul>
<form action="">
<input type="text">
<input type="button" value="发送">
</form>
</div>
</body>
<script src="../js/index.js"></script>
</html>
index.css
*{
padding:0;
margin:0;
}
ul,li{
list-style: none;
}
.box{
width:600px;
padding:10px 30px;
margin:0 auto;
}
p{
height:50px;
line-height:50px;
padding-left:20px;
background: gray;
}
ul{
width:600px;
min-height:400px;
max-height: 500px;
overflow: scroll;
background: lightblue;
}
li{
height:30px;
line-height:30px;
padding: 0px 20px;
}
li a{
float: right;
}
body{
background: lightgray;
}
[type="text"]{
width:400px;
height:30px;
border:1px solid lightblue;
}
[type="button"]{
margin-left:50px;
width:80px;
height:30px;
background: gray;
color: lightgreen;
border:none;
}
index.js
var socket = io('http://10.80.13.200:3002');
var btn = document.querySelector("[type='button']");
var span = document.querySelector("span");
var chat = document.querySelector("ul");
var content = document.querySelector("[type='text']");
var dataM = [];
btn.onclick = function (event) {
console.log(chat.scrollTop,chat.scrollHeight);
//去掉默认事件
event.preventDefault();
if(content.value != '') {
var date = new Date();
var shijian = date.getHours() + ":" + date.getMinutes() + ":" + date.getSeconds();
socket.emit('message',{data:content.value,timee:shijian});
}
chat.scrollTop = chat.scrollHeight-20;
}
socket.on('back',function (data) {
chat.innerHTML = '';
for(var i = 0;i<data.data.length;i++){
dataM[i] = data.data[i];
var li = document.createElement('li');
var a = document.createElement('a');
li.innerHTML = data.data[i].data;
a.href = "#";
a.innerHTML = data.data[i].timee;
li.appendChild(a);
chat.appendChild(li);
}
span.innerHTML = data.num;
});
server.js
var http = require('http');
var fs = require('fs');
var mime = require('mime');
var server = http.createServer(handle);
//绑定服务器
var io = require('socket.io')(server);
function handle(req,res) {
var filePath = '';
if(req.url == '/'){
filePath = './html/index.html';
}else{
filePath = '.'+req.url;
}
exit(filePath,res);
}
function exit(filePath,res) {
fs.exists(filePath,function (exits) {
if(exits){
fs.readFile(filePath,'utf-8',function (err,data) {
if(err){
goTo404(res);
}
res.end(data);
})
}else {
goTo404(res);
}
})
}
function goTo404(res) {
res.writeHead(404,{
"content-type":"text/plain"
})
res.end("404! Sorry! no such file!");
}
server.listen(3002,function () {
console.log('OK');
});
var num = 0;
//用户连接,回调
io.on('connection',function (socket) {
//emit,事件名,发射主体
//on,事件名,接收信息,(服务端和客户端一一对应)
socket.on('message',function (data) {
fs.readFile('./tsconfig.json',function (err,dat) {
if(err){
goTo404(res);
}
var shuju = JSON.parse(dat);
shuju.data.push(data)
fs.writeFile('./tsconfig.json',JSON.stringify(shuju),function (err) {
if(err){
goTo404(res);
}
read();
})
})
num++;
})
function read() {
fs.readFile('./tsconfig.json','utf-8',function (err,dat) {
if(err){
goTo404(res);
}
var shu1 = JSON.parse(dat).data;
io.sockets.emit('back',{data:shu1,num:JSON.parse(dat).data.length});
})
}
read();
});
文件路径
参考网站:
nodeJS之fs模块http://www.jianshu.com/p/5683c8a93511
^-^刚开始学习,写的比较low ^-^