玩转NODE.JS(四)-搭建简单的聊天室的代码

前端之家收集整理的这篇文章主要介绍了玩转NODE.JS(四)-搭建简单的聊天室的代码前端之家小编觉得挺不错的,现在分享给大家,也给大家做个参考。

Nodejs好久没有跟进了,最近想用它搞一个聊天室,然后便偶遇了socket.io这个东东,说是可以用它来简单的实现实时双向的基于事件的通讯机制。我便看了一些个教程使用它来搭建一个超级简单的聊天室。

初始化项目

在电脑里新建一个文件夹,叫做“chatroom”,然后使用npm进行初始化:

然后根据提示以及相关信息一步一步输入,当然也可以一路回车下去,之后会在项目里生成一个package.json文件,里面的信息如下:

这个文件描述了项目的相关信息。

安装socket.io

接下来,安装socket.io:

安装Socket.IO的时候,--save参数用于保存模块依赖信息到package.json文件,安装完后,打开package.json文件会看到里面多了一项内容

同时Socket.IO安装在了node_modules文件夹下。

实现聊天-服务器端

首先我们来编写服务器端程序,新建文件“index.js”,在里面导入如下模块:

第一行是导入http模块,先前我们已经见过了,用于创建http server。

第二行是导入socket.io模块,实现实时聊天必备的,不再赘述。

第三行是导入fs模块,用于读取文件。具体的一会你就会了解到。

通过http模块创建app,在刚刚的代码中加入如下语句:

fs.readFile(__dirname + '/index.html',function (err,data) {
if (err) {
res.writeHead(500);
return res.end('Error loading index.html');
}
res.writeHead(200);
res.write(data);
res.end();
});
}).listen(8888);

fs.readFile()方法用于读取文件,在这里读取的是index.html文件,也就是一会即将要编写的前端聊天室的展示页面

第8行是返回请求的状态码,第9行是返回读取到的内容给浏览器。然后这个http server使用listen方法监听8888端口。

接下来,就是使用socket.io来实现聊天的事件了。在刚刚的index.js文件的http server下面接着创建socket.io对象。

然后监听connection事件,当浏览器连接到此Socket.IO服务时触发该事件:

第4行用于将信息输入到后台显示器,第5行用于将内容发送给客户端,为了知道服务器是否启动,我在后面又加了如下一句:

至此,服务器端编码完成。

实现聊天-客户端

首先实现界面部分,仅仅有显示消息记录以及消息发送框,代码如下:

<Meta charset="utf-8"> Socket.IO chat@H_<a href="/tag/301/" target="_blank" class="keywords">301</a>_75@ <style> * { margin: 0; padding: 0; <a href="/tag/Box/" target="_blank" class="keywords">Box</a>-sizing: border-<a href="/tag/Box/" target="_blank" class="keywords">Box</a>; } body { font: 13px Helvetica,Arial; } #form { background: #000; 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(130,224,255); border: none; padding: 10px; } #messages { list-style-type: none; margin: 0; padding: 0; } #messages li { padding: 5px 10px; } #messages li:nth-child(odd) { background: #eee; } </style> <!-- 引入socket.io库和jQuery库 --> <script src="https://cdn.socket.io/socket.io-1.2.1.js"></script> <script src="http://code.jquery.com/jquery-1.11.1.js"></script> </head> <body> <!-- 显示消息记录 --> <ul id="messages"></ul> <pre><code><!-- 消息发送框 --> <div id="form"&gt; <input id="m" autocomplete="off" /><button id="send"&gt;Send</button> </div></code></pre> </body> </html> </pre> </div> <p>然后需要在里面<a href="/tag/jiashang/" target="_blank" class="keywords">加上</a>JS来实现与服务器端的通信,将服务器端<a href="/tag/huoqu/" target="_blank" class="keywords">获取</a>的数据展示到客户端,主要<a href="/tag/daima/" target="_blank" class="keywords">代码</a>如下: </p> <div class="jb51code"> <pre class="brush:js;"> <script> // 连接到Socket.IO服务器 var socket = io.connect(); <p>$(function() {<br /> // 绑定发按钮发送消息的事件<br /> $('#send').on('click',function() {<br /> var data = $('#m').val();<br /> // 创建chat事件并发送消息给服务器<br /> // emit('event') 表示发送了一个event命令<br /> // 使用io.on('event')接收对应事件的信息<br /> // 所以客户端服务器端需要使用socket.on('chat')接收聊天信息<br /> socket.emit('chat',{ msg: data });<br /> $('#m').val('');<br /> });<br /> });</p> <p>$(function() {<br /> // 接收消息并<a href="/tag/xianshi/" target="_blank" class="keywords">显示</a>到消息记录框中<br /> socket.on('sendmsg',function(msg) {<br /> $('#messages').append($('<li>').text(msg.msg));<br /> });<br /> });</p> </script> </pre> </div> <p>此时,可以执行: </p> <div class="jb51code"> <pre class="brush:js;"> $ node index.js</pre> </div> <p>然后在浏览器打开localhost:8888查看<a href="/tag/xiaoguo/" target="_blank" class="keywords">效果</a>。</p> <p>至此,一个简陋的聊天室就实现了,有兴趣的朋友可以在此基础上进行扩展,实现<a href="/tag/gongneng/" target="_blank" class="keywords">功能</a>更为复杂的聊天室。 </p> <p>项目源<a href="/tag/daima/" target="_blank" class="keywords">代码</a>:<a target="_blank" href="http://xiazai.jb51.cc/201611/yuanma/chatroom-master_jb51.zip">源码下载</a> </p> <p>以上就是本文的全部<a href="/tag/neirong/" target="_blank" class="keywords">内容</a>,希望对大家的学习有所帮助,也希望大家多多<a href="/tag/zhichi/" target="_blank" class="keywords">支持</a>编程之家。</p></div> <div class="topcard-tags"><a href="/tag/nodejskaifawebliaotianshi/" class="tag_link" target="_blank">node.js开发web聊天室</a><a href="/tag/nodejsliaotianshi/" class="tag_link" target="_blank">node.js聊天室</a><a href="/tag/nodejsdajianliaotianshi/" class="tag_link" target="_blank">nodejs搭建聊天室</a></div> <ul class="list-group"> <li class="list-group-item"><a href="/nodejs/44508.html" title="Nodejs中解决cluster模块的多进程如何共享数据问题">上一篇:Nodejs中解决cluster模块的多进程如</a><a href="/nodejs/44474.html" title="NodeJS中的MongoDB快速入门详细教程" class="text-muted pull-right">下一篇:NodeJS中的MongoDB快速入门详细教程</a> </li> </ul> </div> </div> </div> <!-- row end --> <div class="row row-sm"> <div class="col-sm-12 col-md-12 col-lg-12"> <div class="card"> <ins class="adsbygoogle" style="display:block" data-ad-format="autorelaxed" data-ad-client="ca-pub-4605373693034661" data-ad-slot="9144498553"></ins> <script> (adsbygoogle = window.adsbygoogle || []).push({}); </script></div> </div> </div> <div class="row row-sm"> <div class="col-sm-12 col-md-12 col-lg-12"> <div class="card"> <div class="title"><h1>猜你在找的Node.js相关文章</h1></div> <div class="list_con"> <a href="/nodejs/996887.html" title="[javascript] typescript的安装"><img class="lazy" src="/images/np.jpg" data-original="/res/2021/02-05/09/16073fc79a4b8b0c6d0c7faf40937605.png" title="" width="160" height="90" style="float:right;margin-left:30px;display:none;" /><div class="title">[javascript] typescript的安装</div> <div class="summary">现在的js代码都是这种高级点的方式语法 , 就是ts语法 ,要使用ts语法那就要先安装一下 先...</div> <time class="summary">作者:前端之家 时间:2021-02-05</time> </a> </div> <div class="list_con"> <a href="/nodejs/994535.html" title="node版本管理工具nvm"><div class="title">node版本管理工具nvm</div> <div class="summary">nvm是node版本管理工具 为了解决node各种版本存在不兼容现象 nvm是让你在同一台机器上安装...</div> <time class="summary">作者:前端之家 时间:2020-12-29</time> </a> </div> <div class="list_con"> <a href="/nodejs/994534.html" title="node起一个简单服务,打开本地项目或文件浏览"><div class="title">node起一个简单服务,打开本地项目或文件浏览</div> <div class="summary">1、安装nodejs 2、在项目文件夹目录下创建一个js文件,命名server.js(自定义名称),内容如下...</div> <time class="summary">作者:前端之家 时间:2020-12-29</time> </a> </div> <div class="list_con"> <a href="/nodejs/994533.html" title="path的join和resolve的使用区别"><div class="title">path的join和resolve的使用区别</div> <div class="summary">1.连接路径:path.join([path1][, path2][, ...]) path.join()方法可以连接任意多个路径字...</div> <time class="summary">作者:前端之家 时间:2020-12-29</time> </a> </div> <div class="list_con"> <a href="/nodejs/993747.html" title="nodejs与javascript中的aes加密"><div class="title">nodejs与javascript中的aes加密</div> <div class="summary">简介 1.aes加密简单来说,在密码学中又称Rijndael加密法,是美国联邦政府采用的一种区块加...</div> <time class="summary">作者:前端之家 时间:2020-12-23</time> </a> </div> <div style="border-bottom: 1px solid #f4f4f4;margin-top:20px;"> <ins class="adsbygoogle" style="display:block" data-ad-format="fluid" data-ad-layout-key="-fr-2o+fp-dx-wx" data-ad-client="ca-pub-4605373693034661" data-ad-slot="4561116489"></ins> <script> (adsbygoogle = window.adsbygoogle || []).push({}); </script> </div><div class="list_con"> <a href="/nodejs/993745.html" title="带你玩转七牛云存储——高级篇"><img class="lazy" src="/images/np.jpg" data-original="/res/2020/12-23/09/bdbc4a4e00d93937025dde01732944cd.png" title="" width="160" height="90" style="float:right;margin-left:30px;display:none;" /><div class="title">带你玩转七牛云存储——高级篇</div> <div class="summary">七牛云图片存储优点 1. 支持各种尺寸的图片缩放; 2. 支持图片自动压缩; 3. 支持水印添加...</div> <time class="summary">作者:前端之家 时间:2020-12-23</time> </a> </div> <div class="list_con"> <a href="/nodejs/993744.html" title="VueJs生产环境部署"><img class="lazy" src="/images/np.jpg" data-original="/res/2020/12-23/09/7367c086e013616683aeae4b7db032e9.png" title="" width="160" height="90" style="float:right;margin-left:30px;display:none;" /><div class="title">VueJs生产环境部署</div> <div class="summary">VueJs为客户端语言,所以部署的时候是不需要基于nodejs或其他服务器运行环境,只需要像其他...</div> <time class="summary">作者:前端之家 时间:2020-12-23</time> </a> </div> <div class="list_con"> <a href="/nodejs/993743.html" title="vuejs深入浅出—基础篇"><div class="title">vuejs深入浅出—基础篇</div> <div class="summary">一、从HelloWorld说起 任何语言的都是从Hello World开始的,VueJs也不例外,直接上代码: ...</div> <time class="summary">作者:前端之家 时间:2020-12-23</time> </a> </div> <div class="list_con"> <a href="/nodejs/993742.html" title="你必须知道的session与cookie"><div class="title">你必须知道的session与cookie</div> <div class="summary">Session本质 提到Session我们能联想到的就是用户登录功能,而本身我们使用Session的基础是...</div> <time class="summary">作者:前端之家 时间:2020-12-23</time> </a> </div> <div class="list_con"> <a href="/nodejs/993741.html" title="es6新特性分享"><div class="title">es6新特性分享</div> <div class="summary">1、字符串查找es5使用是indexOf() 返回字符第一次出现的位置int值es6新增了3个方法:inclu...</div> <time class="summary">作者:前端之家 时间:2020-12-23</time> </a> </div> <div style="border-bottom: 1px solid #f4f4f4;margin-top:20px;"> <ins class="adsbygoogle" style="display:block" data-ad-format="fluid" data-ad-layout-key="-fr-2o+fp-dx-wx" data-ad-client="ca-pub-4605373693034661" data-ad-slot="4561116489"></ins> <script> (adsbygoogle = window.adsbygoogle || []).push({}); </script> </div></div> </div> </div> </div> <!-- left end--> <!-- right --> <div class="col-sm-12 col-md-12 col-lg-3"> <!-- row --> <div class="row row-sm"> <div class="col-sm-12 col-md-12 col-lg-12"> <div class="card"> <label class="main-content-label ">编程分类</label> <div class="cate mt-20"><a href="/html/" title="HTML">HTML</a><a href="/html5/" title="HTML5">HTML5</a><a href="/js/" title="JavaScript">JavaScript</a><a href="/css/" title="CSS">CSS</a><a href="/jquery/" title="jQuery">jQuery</a><a href="/bootstrap/" title="Bootstrap">Bootstrap</a><a href="/angularjs/" title="Angularjs">Angularjs</a><a href="/typescript/" title="TypeScript">TypeScript</a><a href="/vue/" title="Vue">Vue</a><a href="/dojo/" title="Dojo">Dojo</a><a href="/json/" title="Json">Json</a><a href="/electron/" title="Electron">Electron</a><a href="/nodejs/" title="Node.js">Node.js</a><a href="/extjs/" title="extjs">extjs</a><a href="/express/" title="Express ">Express </a><a href="/xml/" title="XML">XML</a><a href="/es6/" title="ES6">ES6</a><a href="/ajax/" title="Ajax">Ajax</a><a href="/flash/" title="Flash">Flash</a><a href="/unity/" title="Unity">Unity</a><a href="/react/" title="React">React</a><a href="/flex/" title="Flex">Flex</a><a href="/antdesign/" title="Ant Design">Ant Design</a><a href="/webfrontend/" title="Web前端">Web前端</a><a href="/weapp/" title="微信小程序">微信小程序</a><a href="/wxmp/" title="微信公众号">微信公众号</a><div class="clearfix"></div> </div> </div> </div> </div> <!-- row end --> <!-- row --> <div class="row row-sm"> <div class="col-sm-12 col-md-12 col-lg-12"> <div class="card"> <!-- f2er-rightads --> <ins class="adsbygoogle" style="display:block" data-ad-client="ca-pub-4605373693034661" data-ad-slot="7756441254" data-ad-format="auto" data-full-width-responsive="true"></ins> <script> (adsbygoogle = window.adsbygoogle || []).push({}); </script> </div> </div> </div> <!-- row end --> <!-- row --> <div class="row row-sm"> <div class="col-sm-12 col-md-12 col-lg-12"> <div class="card"> <label class="main-content-label ">最新文章</label> <ul class="n-list"><li><a href="/nodejs/996887.html" title="[javascript] typescript的安装" target="_blank">• [javascript] typescript的</a></li> <li><a href="/nodejs/994535.html" title="node版本管理工具nvm" target="_blank">• node版本管理工具nvm</a></li> <li><a href="/nodejs/994534.html" title="node起一个简单服务,打开本地项目或文件浏览" target="_blank">• node起一个简单服务,打开</a></li> <li><a href="/nodejs/994533.html" title="path的join和resolve的使用区别" target="_blank">• path的join和resolve的使用</a></li> <li><a href="/nodejs/993747.html" title="nodejs与javascript中的aes加密" target="_blank">• nodejs与javascript中的ae</a></li> <li><a href="/nodejs/993746.html" title="JavaScript中Object.keys、Object.getOwnPropertyNames区别" target="_blank">• JavaScript中Object.keys、</a></li> <li><a href="/nodejs/993745.html" title="带你玩转七牛云存储——高级篇" target="_blank">• 带你玩转七牛云存储——高</a></li> <li><a href="/nodejs/993744.html" title="VueJs生产环境部署" target="_blank">• VueJs生产环境部署</a></li> <li><a href="/nodejs/993743.html" title="vuejs深入浅出—基础篇" target="_blank">• vuejs深入浅出—基础篇</a></li> <li><a href="/nodejs/993742.html" title="你必须知道的session与cookie" target="_blank">• 你必须知道的session与coo</a></li> </ul> </div> </div> </div> <!-- row end --> <!-- row --> <div class="row row-sm"> <div class="col-sm-12 col-md-12 col-lg-12"> <div class="card"> <label class="main-content-label ">热门标签 <span class="pull-right tx-12"> <a href="/all" target="_blank">更多 ►</a></span> </label> <div class="topcard-tags"><a href="/tag/guanbiyangao/" title="关闭广告" target="_blank">关闭广告</a><a href="/tag/danduheaders/" title="单独headers" target="_blank">单独headers</a><a href="/tag/fengzhuangdaima/" title="封装代码" target="_blank">封装代码</a><a href="/tag/tishicuowu/" title="提示错误" target="_blank">提示错误</a><a href="/tag/zhengshuzhengze/" title="整数正则" target="_blank">整数正则</a><a href="/tag/fei0kaitou/" title="非0开头" target="_blank">非0开头</a><a href="/tag/tiaoye/" title="跳页" target="_blank">跳页</a><a href="/tag/chuyema/" title="出页码" target="_blank">出页码</a><a href="/tag/antdtable/" title="antd table" target="_blank">antd table</a><a href="/tag/tishiURLweizhuce/" title="提示URL未注册" target="_blank">提示URL未注册</a><a href="/tag/gongzhonghaozhifu/" title="公众号支付" target="_blank">公众号支付</a><a href="/tag/vuehashmoshi/" title="vue hash模式" target="_blank">vue hash模式</a><a href="/tag/iSlider/" title="iSlider" target="_blank">iSlider</a><a href="/tag/chepaijianpan/" title="车牌键盘" target="_blank">车牌键盘</a><a href="/tag/xunhuantupian/" title="循环图片" target="_blank">循环图片</a><a href="/tag/echartsshuangzhexian/" title="echarts 双折线" target="_blank">echarts 双折</a><a href="/tag/zuoyoubuju/" title="左右布局" target="_blank">左右布局</a><a href="/tag/DllPlugin/" title="DllPlugin" target="_blank">DllPlugin</a><a href="/tag/duixiangchuangjian/" title="对象创建" target="_blank">对象创建</a><a href="/tag/daziyouxi/" title="打字游戏" target="_blank">打字游戏</a><a href="/tag/quanxuan/" title="圈选" target="_blank">圈选</a><a href="/tag/lianglan/" title="两栏" target="_blank">两栏</a><a href="/tag/yunhanshu/" title="云函数" target="_blank">云函数</a><a href="/tag/mengban/" title="蒙版" target="_blank">蒙版</a><a href="/tag/ES2020/" title="ES2020" target="_blank">ES2020</a><a href="/tag/chuchuang/" title="橱窗" target="_blank">橱窗</a><a href="/tag/wufenggundonglunbo/" title="无缝滚动轮播" target="_blank">无缝滚动轮播</a><a href="/tag/sekuaipengzhuang/" title="色块碰撞" target="_blank">色块碰撞</a><a href="/tag/zujianxiaohui/" title="组件销毁" target="_blank">组件销毁</a><a href="/tag/wendangcaozuo/" title="文档操作" target="_blank">文档操作</a></div> </div> </div> </div> <!-- row end --> <!-- row --> <div class="row row-sm"> <div class="col-sm-12 col-md-12 col-lg-12"> <div class="card"> <!-- f2er-rightads --> <ins class="adsbygoogle" style="display:block" data-ad-client="ca-pub-4605373693034661" data-ad-slot="7756441254" data-ad-format="auto" data-full-width-responsive="true"></ins> <script> (adsbygoogle = window.adsbygoogle || []).push({}); </script> </div> </div> </div> <!-- row end --> </div> <!-- right end --> </div> </div> <footer id="footer"> <div class="container"> <div class="row hidden-xs"> <dl class="col-sm-6 site-link"> <dt>最近更新</dt><dd><a href="/win11/1005328.html" title="小米手机重装系统价格多少?专业维修服务详解" target="_blank">· 小米手机重装系统价格多少?专业维修服务详解</a><span class="text-muted pull-right">02-05</span></dd> <dd><a href="/win11/1005327.html" title="手把手教你重装电脑系统,让你的电脑焕然一新!" target="_blank">· 手把手教你重装电脑系统,让你的电脑焕然一新!</a><span class="text-muted pull-right">02-05</span></dd> <dd><a href="/win11/1005326.html" title="教你一步步重装XP系统,让你的电脑重获新生" target="_blank">· 教你一步步重装XP系统,让你的电脑重获新生</a><span class="text-muted pull-right">02-05</span></dd> <dd><a href="/win11/1005325.html" title="从备份到上网:一步步教你重装电脑系统" target="_blank">· 从备份到上网:一步步教你重装电脑系统</a><span class="text-muted pull-right">02-05</span></dd> <dd><a href="/win11/1005324.html" title="Sony笔记本电脑一键重装系统详细图文教程" target="_blank">· Sony笔记本电脑一键重装系统详细图文教程</a><span class="text-muted pull-right">02-05</span></dd> <dd><a href="/win11/1005323.html" title="Lenovo笔记本重装系统超详细教程,小白也能轻松上手" target="_blank">· Lenovo笔记本重装系统超详细教程,小白也能轻松...</a><span class="text-muted pull-right">02-05</span></dd> <dd><a href="/win11/1005322.html" title="联想笔记本一键重装Win10系统详细教程" target="_blank">· 联想笔记本一键重装Win10系统详细教程</a><span class="text-muted pull-right">02-05</span></dd> <dd><a href="/win11/1005321.html" title="电脑系统故障无需愁,专业维修店帮你重装旧貌换新颜" target="_blank">· 电脑系统故障无需愁,专业维修店帮你重装旧貌换新...</a><span class="text-muted pull-right">02-05</span></dd> <dd><a href="/win11/1005320.html" title="联想笔记本一键重装Win10系统图文教程,小白也能轻松搞定!" target="_blank">· 联想笔记本一键重装Win10系统图文教程,小白也能...</a><span class="text-muted pull-right">02-05</span></dd> <dd><a href="/win11/1005319.html" title="笔记本重装系统图文教程:从光盘启动一步到位" target="_blank">· 笔记本重装系统图文教程:从光盘启动一步到位</a><span class="text-muted pull-right">02-05</span></dd> </dl> <dl class="col-sm-4 site-link"> <dt>好站推荐</dt><dd> <a href="https://www.runoob.com" title="菜鸟教程(www.runoob.com)提供了编程的基础技术教程, 介绍了HTML、CSS、Javascript、Python,Java,Ruby,C,PHP , MySQL等各种编程语言的基础知识。 同时本站中也提供了大量的在线实例,通过实例,您可以更好的学习编程。" target="_blank">菜鸟教程</a></dd><dd> <a href="https://www.jb51.cc" title="编程之家(www.jb51.cc)是成立于2017年面向全球中文开发者的技术内容分享平台。提供编程导航、编程问答、编程博文、编程百科、编程教程、编程工具、编程实例等开发者最需要的编程技术内容与开发工具支持,与你一起学习编程,相信编程改变未来!" target="_blank">编程之家</a></dd><dd> <a href="" title="前端之家 f2er.com 前端开发人员所需学习知识手册。" target="_blank">前端之家</a></dd></dl> <dl class="col-sm-2 site-link"> <dt>商务合作</dt> <dd><a target="_blank" href="http://wpa.qq.com/msgrd?v=3&uin=76874919&site=qq&menu=yes">联系我们</a></dd> </dl> </div> <div class="copyright"> Copyright © 2019 前端之家. 当前版本 V7.0.16<br> <span class="ml5">前端之家 版权所有 <a href="https://beian.miit.gov.cn/" target="_blank" rel="nofollow">闽ICP备13020303号-10</a></span> </div> </div> </footer> <script type="text/javascript" src="/js/base.js"></script> </body> </html>