用socket.io发私信
2017-09-20 16:18
22 查看
在socket.io中发私信其实就是定点对某个特定的socket.id发消息。
下面这个示例有三个一样的客户端, 客户端1发私信给客户端2,客户端2发私信给客户端3, 客户端3发私信给客户端1.
下面是三个客户端的html, 取之于官方范例:
下面是服务器端:
运行后打开3个客户端试验。然后在每个客户端各发一个消息。
这里可以看到
*AAAC 发了消息给了 *AAAA
*AAAA发了消息给了 *AAAB
*AAAB发了消息给 *AAAC
下面这个示例有三个一样的客户端, 客户端1发私信给客户端2,客户端2发私信给客户端3, 客户端3发私信给客户端1.
下面是三个客户端的html, 取之于官方范例:
<!doctype html> <html> <head> <title>Socket.IO chat</title> <style> * { margin: 0; padding: 0; box-sizing: border-box; } body { font: 13px Helvetica, Arial; } form { background: #310707; padding: 3px; position: fixed; bottom: 0; width: 100%; } form input { border: 0; padding: 10px; width: 90%; margin-right: .5%; } form button { width: 9%; background: rgb(75, 183, 216); border: none; padding: 10px; } #messages { list-style-type: none; margin: 0; padding: 0; } #messages li { padding: 5px 10px; } #messages li:nth-child(odd) { background: #C3C8F3; } #messages { margin-bottom: 40px } </style> </head> <script src="/socket.io/socket.io.js"></script> <script src="https://code.jquery.com/jquery-1.11.1.js"></script> <script> $(function () { var socket = io(); $('form').submit(function () { socket.emit('chat message', $('#m').val()); $('#m').val(''); return false; }); socket.on('chat message', function (msg) { $('#messages').append($('<li>').text(msg)); }); }); </script> <body> <ul id="messages"></ul> <form action=""> <input id="m" autocomplete="off" /><button>Send</button> </form> </body> </html>
下面是服务器端:
var app = require('express')(); var http = require('http').createServer(app); var io = require('socket.io')(http); app.get('/test', function (req, res) { res.sendFile(__dirname + '/chat.html'); }); var socketArr = []; //创建一个数组来存放所有连接的socket.id io.on('connection', function (socket) { console.log('a user connected!'); socket.emit('chat message', 'i am ' + socket.id); //连接后在客户端进行自我介绍,是哪个一个socket.id socketArr.push(socket.id); //把连接的socket.id都存入数组 socket.on('chat message', function (msg) { var index = socketArr.indexOf(socket.id); //获得数组的index var id = index == socketArr.length - 1 ? socketArr[0] : socketArr[index + 1]; //选择私信的目标socket.id。 //这是就是1发给2, 2发给3, 3发给1. //按照首尾相连的顺序传递发送消息 socket.to(id).emit('chat message', 'from ' + socket.id + ':' + msg + ' to ' + id); //消息发到指定socket.id的客户端,并且标明是谁发给谁的 }); }); http.listen(3000, function () { console.log('listening on *:3000'); });
运行后打开3个客户端试验。然后在每个客户端各发一个消息。
这里可以看到
*AAAC 发了消息给了 *AAAA
*AAAA发了消息给了 *AAAB
*AAAB发了消息给 *AAAC
相关文章推荐
- 高性能Web应用的优化技术
- JQuery1——基础($对象,选择器,对象转换)
- Android学习笔记(二九):嵌入浏览器
- Android java 与 javascript互访(相互调用)的方法例子
- 只需四个步骤几行代码,即可快速实现直播弹幕功能
- 浅析 Node.js 的 vm 模块以及运行不信任代码
- @blankapp/ui,高可定制和主题化的 React Native 组件库
- JavaScript演示排序算法
- javascript实现10进制转为N进制数
- JavaScript 基础、进阶以及 Ubuntu 系统中的 JavaScript 开发调试工具
- 最后一次说说闭包
- Ajax
- 2019年开发人员应该学习的8个JavaScript框架
- HTML中的script标签研究
- 对一个分号引发的错误研究
- 设计模式---状态模式在web前端中的应用