聊天室模型不一样考虑的问题也不一样

1.websocket文本聊天

* step1 : 向聊天室所有用户(不包括该用户自己)发送当前用户上线信息。客户端用户栏回添加此用户

* step2 : 将该用户添加至连接池中

* step3 : 向该用户发送该聊天室所有用户列表

* 注:step1 和 step2 顺序颠倒时,会在客户端显示两个"自己"

A客户端向服务器发送消息,服务器向所有连接上的websocket客户端发送消息。

2.webrtc聊天室查看所有人音视频

A客户端已经加入聊天室,B客户端后加入。

B客户端

step1:B客户端加入后获取所有在线用户。

step2:向所有PeerConnection发送Offer类型信令

//向所有PeerConnection发送Offer类型信令
skyrtc.prototype.sendOffers = function() {
var i, m,
pc,
that = this,
pcCreateOfferCbGen = function(pc, socketId) {
return function(session_desc) {
pc.setLocalDescription(session_desc);
that.socket.send(JSON.stringify({
"eventName": "__offer",
"data": {
"sdp": session_desc,
"socketId": socketId
}
}));
};
},
pcCreateOfferErrorCb = function(error) {
console.log(error);
};
for (i = 0, m = this.connections.length; i < m; i++) {
pc = this.peerConnections[this.connections[i]];
pc.createOffer(pcCreateOfferCbGen(pc, this.connections[i]), pcCreateOfferErrorCb);
}
};

step3:接收到answer类型信令后将对方的session描述写入PeerConnection中

//接收到answer类型信令后将对方的session描述写入PeerConnection中
skyrtc.prototype.receiveAnswer = function(socketId, sdp) {
var pc = this.peerConnections[socketId];
pc.setRemoteDescription(new nativeRTCSessionDescription(sdp));
};

A客户端:

step1:接收到Offer类型信令后作为回应返回answer类型信令

//接收到Offer类型信令后作为回应返回answer类型信令
skyrtc.prototype.receiveOffer = function(socketId, sdp) {
var pc = this.peerConnections[socketId];
this.sendAnswer(socketId, sdp);
}; //发送answer类型信令
skyrtc.prototype.sendAnswer = function(socketId, sdp) {
var pc = this.peerConnections[socketId];
var that = this;
pc.setRemoteDescription(new nativeRTCSessionDescription(sdp));
pc.createAnswer(function(session_desc) {
pc.setLocalDescription(session_desc);
that.socket.send(JSON.stringify({
"eventName": "__answer",
"data": {
"socketId": socketId,
"sdp": session_desc
}
}));
}, function(error) {
console.log(error);
});
};

参考:

https://segmentfault.com/a/1190000000436544

最新文章

  1. tomcat 虚拟节点
  2. 日期转换(用DateTime的ParseExact方法解析特殊的日期时间)
  3. How to check “hasRole” in Java Code with Spring Security?
  4. MSDN 2005 安装问题
  5. sharepoint2013 新建母板页 新建页面布局 关联母板页和页面布局
  6. 【锋利的jQuery】表单验证插件踩坑
  7. Oracle_SQL92_连接查询
  8. 如何解决-win7系统打开截图工具显示“截图工具当前未在计算机上运行”
  9. openssl升级
  10. java ee,包括js,html,jsp等等知识整合
  11. ECMAScript 6 入门之字符串
  12. Linux终端小技巧
  13. NAT与FULL NAT的区别
  14. 从0x7fffffff+1开始的数学期望
  15. javascript:typeof与instanceof区别
  16. 《java虚拟机》----java内存区域与内存溢出异常
  17. Ubuntu 16.04 搭建 ELK
  18. c#调用c++库函数
  19. Jmeter-7-在命令行中运行Jmeter.
  20. SQL Server “超过了锁请求超时时段”错误

热门文章

  1. POJ 1804 Brainman(归并排序)
  2. SampleDateFormat进行日期格式化
  3. linux下svn 搭建
  4. 一键搭建vpn服务器
  5. 淘淘商城基于maven和svn的理解
  6. (翻译)如何对python dict 类型按键(keys)或值(values)排序
  7. MFC学习-第2,3课 MFC框架的运行机制
  8. JQuery------prevAll(),nextAll(),attr()方法的使用
  9. ORACLE查看并修改session和连接最大数
  10. CURL常用命令--update20151015