1、服务端要使用socket.io并不一定要使用express,不过这里为了方便演示使用了express,不过要使用socket.io必须要使用node自带的http模块,初始化socket.io大概是这样的形式:
var app = require('express')();
var http = require('http').Server(app);
var io = require('socket.io')(http);
require socket.io之后传入一个http的对象,之后启动http的监听
http.listen(3000, function(){
console.log('listening on *:3000');
});
这个时候socket.io已经在工作了,接下来要做的事情就是给socket.io绑定各种事件了
var sockets=new Map();
io.on('connection', function(socket){
//监听新用户加入
socket.on('login', function(obj){
console.log(obj.userid)
sockets.set(obj.userid,socket)
});
//监听用户退出
socket.on('disconnect', function(){
});
socket.on('message', function(obj){
console.log(obj)
sockets.forEach((a,b)=>{
a.emit("message",{text:obj.text});
})
});
});
connection是一个特殊的事件,触发事件时会传入一个客户端的socket的对象,使用该对象就可以与客户端进行通信了,一般的工作流就是把客户端的socket对象都丢到一个map里面,好进行路由操作,在上面的代码里面,我只是简单的把收到的客户端消息再全部转发给全部客户端
2、客户端要使用socket.io 需要在页面调用 socket.io.js 可以自行去上网下载,客户端使用socket.io只比服务端多了个连接操作
<!DOCTYPE html>
<html>
<head lang="en">
<meta charset="UTF-8">
<title></title>
<script src="//cdn.bootcss.com/socket.io/1.4.8/socket.io.js"></script>
</head>
<body>
<input id="txt" type="text"/>
<button id="send">发送消息</button>
<div style="margin-top: 10px;">
<label>消息列表:</label>
<textarea id="list" style="height: 100px;">
</textarea>
</div>
<script>
/*连接服务端*/
var chat = io.connect('ws://192.168.82.135:3000')
chat.on('connect', function () {
/*连接成功*/
chat.emit('login',{userid:Math.random()});
document.querySelector("#send").addEventListener('click',function(){
var text=document.querySelector("#txt").value
chat.emit('message',{text:text})
})
});
chat.on('message', function(obj){
console.log(obj)
var text= document.querySelector("#list").value
text=text+"\r\n"+obj.text;
document.querySelector("#list").value=text
})
</script>
</body>
</html>
客户端连接成功之后就可以使用 emit给服务端发送消息了,使用on监听服务端返回的数据