使用nodejs和socket.io、express来实现websocket 的demo

作者: admin 日期: 2016-07-12 20:55:30 人气: - 评论: 0

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监听服务端返回的数据

相关内容

发表评论
更多 网友评论0 条评论)
暂无评论

Copyright © 2012-2014 我的代码板 Inc. 保留所有权利。

页面耗时0.0291秒, 内存占用1.83 MB, 访问数据库13次

闽ICP备15009223号-1