nodejs tcp的faye-websocket-node模块可以写聊天室吗

WebSocket+node.js创建即时通信的Web聊天服务器
作者:fareise
字体:[ ] 类型:转载 时间:
这篇文章主要为大家详细介绍了WebSocket+node.js创建即时通信的Web聊天服务器的相关资料,感兴趣的小伙伴们可以参考一下
本文实例node.js创建即时通信的Web聊天服务器,供大家参考,具体内容如下
1.使用nodejs-websocket
&nodejs-websocket是基于node.js编写的一个后端实现websocket协议的库,
&连接:/sitegui/nodejs-websocket。
&在项目目录下通过npm安装:npm install nodejs-websocket
&(2)创建服务器
//引入nodejs-websocket
var ws = require(“nodejs-websocket”);
//调用createServer方法创建服务器,回调函数中的conn是connection的实例
var server = ws.create(function(conn){
console.log(“New connection”);
//监听text事件,text事件每当从服务器收到文本类型数据时触发,回调函数的参数为传过来的字符串
conn.on(“text”, function(str){
console.log(“Received ” + str);
//监听close事件,每次断开连接时触发
conn.on(“close”, function(code, reason){
console.log(“Connection closed”);
}).listen(8888);
&2.客户端使用websocket
&在客户端首先需要实例化一个websocket对象:ws = new WebSocket("ws://localhost:5000");其中的参数传入格式为ws://+url,这就和http协议前缀http://一样。接下来就可以通过websocket内置的一些方法进行事件监听和数据展示。
&这里统一介绍各个监听事件:onopen当服务器和客户端建立起连接时触发;onmessage当客户端收到服务器发送的数据时触发; onclose当客户端和服务器的连接关闭时触发;onerror当连接出现错误时触发。
3.使用websocket+nodejs实现在线聊天室
&(1)html和css代码省略
&(2)客户端js:&&&&
oConnect.onclick=function(){
ws=new WebSocket('ws://localhost:5000');
ws.onopen=function(){
oUl.innerHTML+="&li&客户端已连接&/li&";
ws.onmessage=function(evt){
oUl.innerHTML+="&li&"+evt.data+"&/li&";
ws.onclose=function(){
oUl.innerHTML+="&li&客户端已断开连接&/li&";
ws.onerror=function(evt){
oUl.innerHTML+="&li&"+evt.data+"&/li&";
oSend.onclick=function(){
ws.send(oInput.value);
}(3)服务器端js:
websocket支持两种类型的数据传输:text类型和binary类型,其中二进制数据是通过流的模式发送和读取的
var app=require('http').createServer(handler); //为了简化代码,将服务器创建具体代码放到handler函数中
var ws=require('nodejs-websocket');
var fs=require('fs');
app.listen(8888);
function handler(req,res){
//__dirname返回该文件所在的当前目录。调用readFile方法进行文件读取
fs.readFile(__dirname+'/index.html',function(err,data){
res.writeHead(500);
return res.end('error ');
res.writeHead(200);
res.end(data);
//以上步骤成功在8888端口渲染出相应的html界面
//conn是对应的connection的实例
var server = ws.createServer(function(conn){
console.log('new conneciton');
//监听text事件,每当收到文本时触发
conn.on("text",function(str){
broadcast(server,str);
//当任何一端关闭连接时触发,这里就是在控制台输出connection closed
conn.on("close",function(code,reason){
console.log('connection closed');
}).listen(5000);
//注意这里的listen监听是刚才开通的那个服务器的端口,客户端将消息发送到这里处理
function broadcast(server, msg) {
//server.connections是一个数组,包含所有连接进来的客户端
server.connections.forEach(function (conn) {
//connection.sendText方法可以发送指定的内容到客户端,传入一个字符串
//这里为遍历每一个客户端为其发送内容
conn.sendText(msg);
以上就是本文
的全部内容,希望对大家的学习有所帮助,也希望大家多多支持脚本之家。
您可能感兴趣的文章:
大家感兴趣的内容
12345678910
最近更新的内容
常用在线小工具2480人阅读
基于WebSocet简单聊天室(NodeJS + node-websocket-server)
3人收藏此文章,
发表于24天前 , 已有135次阅读 共个评论
3人收藏此文章
最近在学习HTML5相关的东西,看到WebSocket是个很强大的技术,于是乎就小试了一下,做了个简单的聊天室。
WebSocket的原理就不多介绍了,如果想自己实现WebSocket服务器的话具体协议看这里:&& (不知道各位看官能不能看下去,反正我是没有看!)
一、运行环境
&& &1、服务端:前个阶段看到OSChina上介绍NodeJS,感觉是个很不错的东东,前后台都用js应该是个很不错的感觉吧,哈哈:P。既然要用到WebSocket,当然要看看如何让NodeJS支持WebSocket了。经过搜索发现 node-websocket-server 是NodeJS的一个WebSocket实现,安装好&node-websocket-server 我们就可以开工了。不过我安装&node-websocket-server的时候可是费了点周折,为其他童鞋少走弯路我这里就简单说一下吧:
&& &Linux下安装比较简单,首先安装NPM,命令(curl&http://npmjs.org/install.sh&| sh);安装完NPM后进入你的项目开发目录然后执行npm install websocket-server即可安装node-websocket-server。
&& &Windows下由于无法安装NPM(除非使用cygwin......这样岂不太麻烦?),而且不知道nodejs模块的目录结构,所以没有办法自己又在Arch用NPM方式安装了一遍。安装后发现其目录结构如下:在项目目录下生成一个node_modules目录,打开node_modules可以看到有个websocket-server目录.......是不是按照这样的目录结构在Windows下也可以呢?于是乎果断到Windows中试验,下载websocket-server插件(),解压后按照上面的目录放置后启动nodejs,果然可以
;-)。node-websocket-server的使用也非常简单,详细参见 :
下面就开始贴代码了......
二、服务端实现
&功能简单描述:创建一个数组用来保存所有连接到服务器的链接,当收到一个来自客户端的消息后就把这条消息发送给其他客户端。
conns = new
ws = require('websocket-server');
server = ws.createServer();
server.addListener('connection',
function(conn){
&&&&console.log('connection....');
&&&&conns.push(conn);
&&&&conn.addListener('message',function(msg){
&&&&&&&&console.log(msg);
&&&&&&&&&&
&&&&&&&&for(var
i=0; i&conns. i++){
&&&&&&&&&&&&if(conns[i]!=conn){
&&&&&&&&&&&&&&&&conns[i].send(msg);
&&&&&&&&&&&&}
server.listen(8080);
console.log('running......');
三、客户端实现
在收到消息的时候会响起经典的那句:您有新短消息,请注意查收&
type=&text/javascript&&
var host = '127.0.0.1';
var port = 8080;
var url = 'ws://'+host+':'+port+'/';
var w = new WebSocket(url);
var audioElement = document.createElement('audio');
audioElement.setAttribute('src', 'qqmsg.mp3');
w.onopen = function(){
&&&&$('chat-box').innerHTML = '已连接到服务器......&br/&';
w.onmessage = function(e){
&&&&var msg = e.
&&&&var chatBox = $('chat-box');
&&&&audioElement.play();&&&&
&&&&chatBox.innerHTML = chatBox.innerHTML+msg+'&br/&';
function send(){
&&&&var talk = $('talk');
&&&&var nike = $('nike');
&&&&w.send('&strong
style=&color:red&&'+nike.value+':&/strong&'+talk.value);
function $(id){
&&&&return document.getElementById(id);
id=&chat-box&
style=&bordddder:1px solid # width:400 height:400 overflow:&&&/div&
昵称:&input
type=&text&
id=&nike&/&&br/&
内容:&input
type=&text&
id=&talk&/&&input
type=&button&
onClick=&send();&
value=&发送&/&
四、运行效果
上面的例子在chrome下测试开发,其他浏览器未进行测试~~。
有了websocket我们可以轻松的实现以前很难实现的功能。而nodejs也让人眼前一亮,前后台都用js的感觉相当的爽啊.真是非常喜欢nodejs,也推荐大家都试用一下,非常容易上手。
参考知识库
* 以上用户言论只代表其个人观点,不代表CSDN网站的观点或立场
访问:63440次
排名:千里之外
原创:23篇
转载:33篇
评论:15条
(1)(1)(3)(2)(6)(16)(2)(3)(1)(7)(6)(10)当前访客身份:游客 [
拥有积分:4
这家伙太懒,还没有签名!
解答题中心
基于SocketIO在Nodejs上构建Web聊天室(系列一)
( 23:35:14) &|
&评论(0)&&|
&阅读次数(3198)|
人收藏此文章,
& &&为了创建一个web聊天室,那么首先和传统信息项目不一样的地方在于,我们不止要从服务器端获取信息,同时我们还需要服务器主动的给我们推送数据.推送这个词我觉得很好,不仅仅是浏览器客户端将信息或者请求发送给服务器,服务器也要主动的将信息发送给客户端.
socket.io 是一个为实时应用提供跨平台实时通信的库。socket.io 旨在使实时应用在每个浏览器和移动设备上成为可能,模糊不同的传输机制之间的差异
& & Nodejs中我们使用socket.io的来实现这一目的,这是一个在基于Nodejs平台下的,已经封装好的WebSocket实现,通过它来实现浏览器和服务器端的双向实时通道,当然现在不是所有的浏览器都支持WebSocket,不过不用担心,socket.io已经集成了多种方式去实现,即使客户端不支持websocket也会自动使用其他方式.详细的可以查看socket.io的官网:,查看Supported transports我们可以看到它实现的多种方式.
& & 我们在系列一中,先来实现一个简单的demo,也是聊天室的基础骨架,做一个统计在线人数并且可以简单发送消息的这样一个功能.
& & 首先确定,我们不适用Express,使用nodejs原生即可,文件不多,代码很少没必要用上框架.没有安装Nodejs的朋友或者Nodejs基础为零的同学可以自行百度安装,很简单,现在我们开始.
& & 1.首先,在E盘创建一个文件夹,这里就叫做SocketIODemo1,在其中创建一个package.json文件.有Nodejs基础的同学会知道,这是一个配置文件,在里面配置好我们项目需要的模块,然后可以通过npm安装.
& & 打开新创建的package.json文件,在其中写下如下代码:
"name":"SocketIO",
"version":"0.0.1",
"private":true,
"dependencies":{
"socket.io":"*"
& & 在当前需求下,我们只需要socket.io,"*"表示要下载最新版本.然后我们cmd打开命令行输入:
cd SocketIO
npm install
这样npm会根据我们的配置文件,自动去下载所需要的模块文件,接下来我们来编写服务器端代码,在文件夹内继续创建一个app.js文件,开始写入代码:
var http = require('http');
var fs = require('fs');
//创建一个HTTP服务器,一旦有请求发送到这个服务器监听地址,则开始处理请求
var server = http.createServer(function (req, res) {
//这里的含义则是,不管什么请求,都去读取同目录下index.html文件,并将其内容返回给请求.
fs.readFile('./index.html', function(error, data) {
res.writeHead(200, { 'Content-Type': 'text/html' });
res.end(data, 'utf-8');
}).listen(3000, "127.0.0.1");
console.log('Server running at http://127.0.0.1:3000/');
//将SocketIO库包含进来,并绑定到服务器上.
var io = require('socket.io').listen(server);
var count = 0;
//监听所有到服务器上的连接.
io.sockets.on('connection', function (socket) {
//有新的连接,count加1,将现在的总连接数,广播给所有用户.
socket.emit('usernum',{number:count});
socket.broadcast.emit('usernum',{number:count});
//一旦有请求,连接到服务器,则监听message事件,读取信息,然后将这个信息广播给所有的连接,包括新的连接和老的连接.
socket.on('message', function (data) {
socket.emit('push message', data);
socket.broadcast.emit('push message', data);
//监听断开连接,count减1,然后将总连接数发送给其他全部客户端
socket.on('disconnect',function(){
socket.broadcast.emit('usernum',{number:count});
& & 写完这些,我们服务器方面的处理就完成了,其中大部分代码我已经加入注释方便大家阅读,有问题可以留言给我.这里说明一下就是io.sockets.on的监听方法中socket.emit和socket.broarcast.emit的区别.前者是将消息发送给触发事件的浏览器,这里就是新连接的浏览器.后者是将消息发送给所有之前就已经连接的浏览器.这两个加在一起,才是广播给全部的连接.
& & 然后我们继续创建html文件,也就是客户端,新建一个index.html文件,在其中编写代码:
&!DOCTYPE html&
&html lang="en"&
&meta charset="utf-8" /&
&title&Socket.IO Example&/title&
&h1&Socket.IO Example&/h1&
&h1 id="usernum"&&/h1&
&form id="message-form" action="#"&
&textarea id="message" rows="4" cols="30"&&/textarea&
&input type="submit" value="Send message" /&
&!-- 将jquery和SocketIO的库包含进来,SocketIO如果服务器和客户端在同一服务器(同一项目中),那么这里会自动引入这个SocketIO客户端js --&
&script src="/js/sandbox/jquery/jquery-1.8.2.min.js"&&/script&
&script src="/socket.io/socket.io.js"&&/script&
//指示浏览器连接位于http://127.0.0.1:3000的SocketIO服务器
var socket = io.connect('http://127.0.0.1:3000');
//监听服务器广播的usersnum事件
socket.on('usernum',function(data){
$("#usernum").html("当前连接人数:" + data.number);
var message = document.getElementById('message');
$(message.form).submit(function() {
//表单提交发送信息给SocketIO服务器,服务器端监听message事件即可获取到信息.
socket.emit('message', { text: message.value });
//客户端监听push message事件,这是服务器端广播的,广播给除了发送消息的浏览器之外的全部浏览器
socket.on('push message', function (data) {
$('form').after('&p&' + data.text + '&/p&');
&&&&这里我们在客户端引入了两个js文件,一个jquery另一个就是socket.io.我要说明一下,socket.io客户端js文件的引入之所以可以这么写,是因为我们服务器端引用了socket.io的模块,所以这里客户端文件直接通过这种写法引入.而jqeury这里是引用了一个外部网址,而不是我们项目内的一个jquery文件.因为我们没有功能区处理静态文件的加载,也就是css,js这些文件.而在我们创建的http服务器中,对于链接请求没有这方面处理,所以即使有jquery文件我们也法成功加载.
& & 这里我们暂时这么写,后续或者会有一个静态文件服务器的写法给大家或者直接使用Express框架.
& & 现在index.html,app.js,package.json这3个文件都完成了,我们的这个小demo也算可以运行,打开cmd命令行,进入当前文件夹,输入node app.js
& & 看一下效果截图:
关注微信,跟着我们扩展技术视野。每天推送IT新技术文章,每周聚焦一门新技术。微信二维码如下:
微信公众账号:尚学堂(微信号:bjsxt-java)
原文链接:用node.js和Websocket来做个多人聊天室吧 - CNode技术社区
这家伙很懒,什么个性签名都没有留下。
初学node.js和html5的相关技术(node方面大部分都是在cnodejs.org上面看技术文章学到的),想着学以致用,于是基于node.js和websocket来做了一个多人聊天室:
一、功能简介
1、用户随意输入一个昵称即可登录
2、登录成功后
1) 对正在登录用户来说,罗列所有在线用户列表,罗列最近的历史聊天记录
2) 对已登录的用户来说,通知有新用户进入房间,更新在线用户列表
3、退出登录
1) 目前未支持直接退出,只能通过关闭网页来退出…
2) 当有用户退出,其他所有在线用户会收到信息,通知又用户退出房间,同时更新在线用户列表
1) 聊天就是广播,把信息广播给所有连接在线的用户
5、一些出错处理
1) 暂时简单处理了系统逻辑错误、网络出错等特殊情况的出错提示
二、技术简介
1、node方面主要是基于node-websocket-server这个框架;服务器和客户端用JSON数据来通讯;
2、其他的就不多说了,直接贴上这个小demo的源码地址:
。有兴趣的可以看看,欢迎各位网友批评指正。
三、参考文章
1、websocket与node.js的完美结合(
) 。从这里了解到node-websocket-server 这个框架的,一个node.js和websocket通讯的框架,本程序中有使用到。
2、nodejs: 真正的一份代码,到处运行(
) 。从这里了解到如何在svr和client中同时复用部分代码,当然,本程序也模仿了这里面的技术来做,例如我源码里面svr/chatLib.js其实是同时被svr和client公用的。
四、附带几张效果图
1、 进入源码目录,svr/Main.js,执行node Main.js来启动
2、 输入昵称
3、 聊天主界面
4、 聊天主界面之“后登陆用户查看历史消息”
我想问一下,用户的唯一标识UUID是如何创建的呢?
数据存储是用什么呢?
为什么我运行不起来这个例子呢 ?
我安装 express 的项目都能跑起来。。
但是这个项目,我node Main.js 后,启动起来后,,我访问
却访问不到页面 ?
请教,这个为什么呢?
未来nodejs在websocket方面会成为重头戏
最近也做了个这样的聊天室,然后升级成了一个你画我猜的游戏,可惜还找不到支持websocket的免费服务器
客户端在打开web/index.html网页,而不是在浏览器中输出localhost:9800
我在windows下面用node.exe运行 提示我 process.stdout.flush();
这个错误 说WriteStream has no method flush
这是怎么回事? 是缺少什么包吗?
chromium 18
出现无法连接服务器的问题
onopen事件 无法执行
这是怎么回事
浏览器的问题吗?我看了node-websocket-server的源码
他使用的75的标准
我在网上查到chrome貌似更新到76了
我修改node-websocket-server的源码让他使用76标准 同样无法运行.有谁能用chrome 运行起这个例子吗?教教我 谢了
我的chrome版本:15.0.874.121 m ,实现了draft10标准以后,整个系统能够跑起来,但有一个奇怪的问题,就是chat.js里在onopen以后,连续send了3个消息(login,list_user,list_history),这三个请求如果不间断的发送,会导致错误,错误的原因是发送的json格式出错,也就是未能正确的发送消息,但如果在其中插入alert的话,是可以正确发送3个消息。在node-websocket-server提供的chat实例里,也试过在onopen事件触发的时候连续发送多条消息,都会出现错误。不知哪位高人能给出一下解释?
我使用的0.6.6 Node.js,在Linux下运行
process.stdout.flush();
^
TypeError: Object # has no method ‘flush’
at /root/jasper/monsocket/lib/ws/connection.js:43:22
at new Connection (/root/jasper/monsocket/lib/ws/connection.js:82:5)
at Server. (/root/jasper/monsocket/lib/ws/server.js:65:7)
at Server.emit (events.js:88:20)
at Socket. (http.js:1389:14)
at TCP.onread (net.js:348:27)
我的websocket 本地跑没问题,放NAE上也是能跑起来的,可是外面却连不上websocket服务器,为什么?
L我也是这个问题,求指导~
请教一下node Main.js以后怎么访问工程里面的html?我不管怎么访问 页面都显示No Implemeted.
点击“进入聊天室”没有反应啊,话说chatroom.htm里面也的button也没有绑定点击事件啊。。。怎么破
能不能控制只有经过验证的用户可以建立连接呢,类似与只有登录的用户才能建立websocket
CNode 社区为国内最专业的 Node.js 开源技术社区,致力于 Node.js 的技术研究。
服务器赞助商为
,存储赞助商为
,由提供应用性能服务。
新手搭建 Node.js 服务器,推荐使用无需备案的

我要回帖

更多关于 nodejs tcp 的文章

 

随机推荐