websocket搭建的聊天室
在前后端数据交互的时候我们经常使用的是ajax,用的是传统的http协议,而http协议有个致命的缺点,就是请求一结束,连接就断开了, 我们为了保持这个链接的,通常会使用cookie,而自从h5出现websocket之后,妈妈再也不用担心我的请求了,可以愉快的玩耍了,websocket是TCP协议,也就是所谓的“长连接”,可以一直保持,客户端与服务端的连接,交互起来自然是so easy ,to happy,这两天利用工作之余,写了一个基于nodejs和websocket的聊天室,只为说明原理,没有做任何的样式,不喜勿喷
这是客户端:
<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title></title>
</head>
<body>
<input type="text" id="input"/>
<input type="button" value="发送" id="btn"/>
</body>
<script>
var websocket = new WebSocket("ws://localhost:3000/"); function showMessage(type,str){
var div = document.createElement('div');
div.innerHTML = str; if(type == 'enter'){
div.style.color = 'blue';
}else if(type == 'leave'){
div.style.color = 'red';
}
document.body.appendChild(div); }
websocket.onopen = function(){ //连接成功后的回调
document.getElementById('btn').onclick = function(){
var txt = document.getElementById('input').value;
if(txt){
websocket.send(txt);
}
}
}
websocket.onclose = function(){ //关闭连接的回调 }
websocket.onmessage = function(e){ //发送消息的回掉
var msg = JSON.parse(e.data);
showMessage(msg.type,msg.data);
} </script>
</html>
这是服务端:
var ws = require("nodejs-websocket") //导入nodejs-websocket模块 var PORT = 3000;
var clientCount = 0;
// Scream server example: "hi" -> "HI!!!"
var server = ws.createServer(function (conn) { //建立连接时
console.log("New connection")
clientCount++;
conn.nickname = 'user'+clientCount; //每一个用户名
var msg = {};
msg.type = "enter"; //消息的类型,
msg.data = conn.nickname + ' 进入了聊天室';
msg = JSON.stringify(msg); //数据格式化
broadcast(msg); //用于广播数据 console.log(msg);
conn.on("text", function (str) {
console.log("Received "+str)
var msg = {};
msg.type = 'message';
msg.data = conn.nickname + ':' + str;
msg = JSON.stringify(msg);
broadcast(msg);
})
conn.on("close", function (code, reason) { //链接关闭的回调,注意这个一定要写,否则在关闭页面的时候,服务会抛异常;
console.log("Connection closed")
var msg = {};
msg.type = 'leave';
msg.data = conn.nickname +'离开了';
msg = JSON.stringify(msg);
broadcast(msg); })
conn.on("error", function (err) { //出错时候的回调;
console.log(err);
})
}).listen(PORT); function broadcast(str){
server.connections.forEach(function(connection){ //遍历所有的链接
connection.sendText(str); //给每一个链接发送数据
});
}
有说的不对的欢迎大家吐槽,大家相互学习。
websocket搭建的聊天室的更多相关文章
- nodejs+mongoose+websocket搭建xxx聊天室
简介 本文是由nodejs+mongoose+websocket打造的一个即时聊天系统:本来打算开发一个类似于网页QQ类似功能的聊天系统,但是目前只是开发了一个模块功能 --- 类似群聊的,即一对多的 ...
- php+websocket搭建简易聊天室实践
1.前言 公司游戏里面有个简单的聊天室,了解了之后才知道是node+websocket做的,想想php也来做个简单的聊天室.于是搜集各种资料看文档.找实例自己也写了个简单的聊天室. http连接分为短 ...
- 使用Html5下WebSocket搭建简易聊天室
一.Html5WebSocket介绍 WebSocket protocol 是HTML5一种新的协议(protocol).它是实现了浏览器与服务器全双工通信(full-duplex). 现在,很多网站 ...
- Java和WebSocket开发网页聊天室
小编心语:咳咳咳,今天又是聊天室,到现在为止小编已经分享了不下两个了,这一次跟之前的又不大相同,这一次是网页聊天室,具体怎么着,还请各位看官往下看~ Java和WebSocket开发网页聊天室 一.项 ...
- SpringBoot 搭建简单聊天室
SpringBoot 搭建简单聊天室(queue 点对点) 1.引用 SpringBoot 搭建 WebSocket 链接 https://www.cnblogs.com/yi1036943655/p ...
- SilverLight搭建WCF聊天室详细过程[转]
http://www.silverlightchina.net/html/zhuantixilie/getstart/2011/0424/7148.html 默认节点 SilverLight搭建WCF ...
- 分享基于 websocket 网页端聊天室
博客地址:https://ainyi.com/67 有一个月没有写博客了,也是因为年前需求多.回家过春节的原因,现在返回北京的第二天,想想,应该也要分享技术专题的博客了!! 主题 基于 websock ...
- 基于Node.js + WebSocket 的简易聊天室
代码地址如下:http://www.demodashi.com/demo/13282.html Node.js聊天室运行说明 Node.js的本质就是运行在服务端的JavaScript.Node.js ...
- workerman-chat(PHP开发的基于Websocket协议的聊天室框架)(thinkphp也是支持socket聊天的)
workerman-chat(PHP开发的基于Websocket协议的聊天室框架)(thinkphp也是支持socket聊天的) 一.总结 1.下面链接里面还有一个来聊的php聊天室源码可以学习 2. ...
随机推荐
- CSS3 Transition 过渡
CSS3属性中有关于制作动画的三个属性:Transform,Transition,Animation: Transition:对元素某个属性或多个属性的变化,进行控制(时间等),类似flash的补间动 ...
- chrome devTool
在console中访问节点 使用document.querySelectAll()访问元素 使用$0快速访问选中的元素,光标选中的元素,早console中输入$0获取选中元素的dom信息 拷贝 > ...
- 【OpenGL开发】关于GLEW扩展库
GLEW是一个跨平台的C++扩展库,基于OpenGL图形接口.使用OpenGL的朋友都知道,window目前只支持OpenGL1.1的涵数,但 OpenGL现在都发展到2.0以上了,要使用这些Open ...
- 使用Wifi pineapple(菠萝派)进行Wi-Fi钓鱼攻击
简介: WiFi Pineapple 是由国外无线安全审计公司Hak5开发并售卖的一款无线安全测试神器. 特性: 用作 Wi-Fi 中间人攻击测试平台 一整套的针对 AP 的渗透测试套件 基于 WEB ...
- [转]PHP程序员的技术成长规划
转自:http://blog.leanote.com/post/darker/PHP%E7%A8%8B%E5%BA%8F%E5%91%98%E7%9A%84%E6%8A%80%E6%9C%AF%E6% ...
- 解决 IE 或者兼容模式不支持 document.getElementsByClassName() 的方法
网页错误详细信息消息: 对象不支持此属性或方法 document.getElementsByClassName('element_name') 需要自己实现下该方法,因为ie5之前的版本并不支持这个方 ...
- [Xamarin] - 连接 Mac Agent 显示 "couldn't connect to xxxx, please try again" 之解决
背景 在 VS 2017 的 Xamarin 项目中,配置 Mac Agent 连接到本地虚拟机中的 MacOS 失败. 1. MacOS 已启用远程登陆.2. SSH 可以登陆成功.3. 防火墙已关 ...
- 转:对JavaScript中闭包的理解
关于 const let var 总结: 建议使用 let ,而不使用var,如果要声明常量,则用const. ES6(ES2015)出现之前,JavaScript中声明变量只有 ...
- 【Qt】Qt5.12连接MySQl5.7(亲自测试成功)
目录 00. 目录 01. Qt5.12连接MySQL5.7测试代码 02. Qt5.12连接MySQL5.7问题描述 03. 解决办法 04. 结果测试 05. 打赏 00. 目录 01. Qt5. ...
- ALV报表——ALV颜色设置(三)
目录 一.行 二.列 三.单元格 四.附ALV的颜色代码 一.行:用Layout相关属性设置 代码: *Report ZRFI001_XFL_TEST REPORT ZRFI001_XFL_TEST ...