聊天室页面-->index.html

<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title>初识WebSocket</title>
</head>
<body>
<h1>Chat Room</h1>
<div style="margin-top: 30px;margin-left:30px">
<input type="text" id="info">
<button id="send">send</button>
<div id="notice"></div>
<div id="msg"></div>
</div>
</body>
<script src="websocket.js"></script>
</html>

  

发送请求与接受响应-->websocket.js

var info = document.getElementById("info");
var send= document.getElementById("send");
var notice = document.getElementById("notice");
var msg = document.getElementById("msg"); var ws = new WebSocket("ws://localhost:8001");
ws.onopen = function(){
notice.innerHTML = "websocket connected";
}
ws.onclose = function(){
notice.innerHTML = "closed"
}
ws.onmessage = function(response){
console.log(response);
//收到message后,创建一个div,保存消息,并追加到msg中。
var div = document.createElement("div");
var json = JSON.parse(response.data);
switch(json.type){
case "enter":
div.innerHTML = "<font color='blue'>" + json.data + "</font>";
break;
case "message":
div.innerHTML = "<font color='orange'>" + json.data + "</font>";
break;
default:
div.innerHTML = "<font color='brown'>" + json.data + "</font>";
break;
}
msg.appendChild(div);
}
send.onclick = function(){
ws.send(info.value)
}

  

WebSocket服务器-->server.js

var ws = require("nodejs-websocket")

var port = 8001;
var count = 0;//client的计数器 function broadcast(server, msg) {
//server.connections是一个数组,保存着所有client
server.connections.forEach(function (connection) {
connection.sendText(msg);
});
}
var server = ws.createServer(function (conn) {
console.log("New connection");
count++;
conn.nickname = "user" + count;
var msg = {
"type" : "enter",
"data" : conn.nickname + " come in"
}
broadcast(server, JSON.stringify(msg));
conn.on("text", function (str) {
console.log("Received From: "+ conn.nickname + " ---- Data:" + str);
var msg = {
"type" : "message",
"data" : conn.nickname + ": " + str
}
broadcast(server, JSON.stringify(msg));
});
conn.on("close", function (code, reason) {
var msg = {
"type" : "left",
"data" : conn.nickname + " left the room"
}
broadcast(server, JSON.stringify(msg));
console.log("Connection closed");
});
conn.on("error", function(err){
console.log("some accident happend");
console.log(err);
});
}); console.log("websocket started , listening " + port)
server.listen(port)

  

WebSocket实现一个聊天室的更多相关文章

  1. Java和WebSocket开发网页聊天室

    小编心语:咳咳咳,今天又是聊天室,到现在为止小编已经分享了不下两个了,这一次跟之前的又不大相同,这一次是网页聊天室,具体怎么着,还请各位看官往下看~ Java和WebSocket开发网页聊天室 一.项 ...

  2. web即时通讯2--基于Spring websocket达到web聊天室

    如本文所用,Spring4和websocket要构建web聊天室,根据框架SpringMVC+Spring+Hibernate的Maven项目,后台使用spring websocket进行消息转发和聊 ...

  3. 基于react+react-router+redux+socket.io+koa开发一个聊天室

    最近练手开发了一个项目,是一个聊天室应用.项目虽不大,但是使用到了react, react-router, redux, socket.io,后端开发使用了koa,算是一个比较综合性的案例,很多概念和 ...

  4. 分享基于 websocket 网页端聊天室

    博客地址:https://ainyi.com/67 有一个月没有写博客了,也是因为年前需求多.回家过春节的原因,现在返回北京的第二天,想想,应该也要分享技术专题的博客了!! 主题 基于 websock ...

  5. 基于Node.js + WebSocket 的简易聊天室

    代码地址如下:http://www.demodashi.com/demo/13282.html Node.js聊天室运行说明 Node.js的本质就是运行在服务端的JavaScript.Node.js ...

  6. workerman-chat(PHP开发的基于Websocket协议的聊天室框架)(thinkphp也是支持socket聊天的)

    workerman-chat(PHP开发的基于Websocket协议的聊天室框架)(thinkphp也是支持socket聊天的) 一.总结 1.下面链接里面还有一个来聊的php聊天室源码可以学习 2. ...

  7. 使用原生node写一个聊天室

    在学习node的时候都会练习做一个聊天室的项目,主要使用socket.io模块和http模块.这里我们使用更加原始的方式去写一个在命令行聊天的聊天室. http模块,socket.io都是高度封装之后 ...

  8. 利用socket.io构建一个聊天室

    利用socket.io来构建一个聊天室,输入自己的id和消息,所有的访问用户都可以看到,类似于群聊. socket.io 这里只用来做一个简单的聊天室,官网也有例子,很容易就做出来了.其实主要用的东西 ...

  9. Websocket直播间聊天室教程 - GoEasy快速实现聊天室

    最近两年直播那个火啊,真的是无法形容!经常有朋友问起,我想实现一个直播间聊天或者我想开发一个聊天室, 要如何开始呢? 今天小编就手把手的教你用GoEasy做一个聊天室,当然也可以用于直播间内的互动.全 ...

随机推荐

  1. 负载均衡(nginx、dubbo、zookeeper)

    nginx dubbo zookeeper

  2. 我的第一个SolidWorks图

    1. 学习到的知识点 2. 完成的工程图 3. 感受 学习是一种快乐,学到新的知识要学会分享,只要坚持,就有那么一点点的成就. 4. 参考 SolidWorks帮助文档

  3. Linux常用命令-解压缩篇

    前言 Linux常用命令中,有很多用于对文件的压缩或解压,本文将介绍这些解压缩命令中不常见却非常实用的用法. tar tar是linux中最常用的解压缩命令.tar命令可用于处理后缀名为tar,tar ...

  4. MySQL 初识别语句,数据库、表、行的增删改查

    一.MySQL 开场语句 1.登陆 mysql -u root -p ; #回车然后输入密码 2.退出 eixt | quit #二者选其一 3.查看数据文件路径(配置文件中学习的) show glo ...

  5. nginx+keepalived高可用及双主模式

    高可用有2中方式. 1.Nginx+keepalived 主从配置 这种方案,使用一个vip地址,前端使用2台机器,一台做主,一台做备,但同时只有一台机器工作,另一台备份机器在主机器不出现故障的时候, ...

  6. 查看linux内存使用情况

    查看内存使用情况 free -m total used free shared buffers cached Mem: -/+ buffers/cache: Swap: used=total-free ...

  7. P1705 爱与愁过火(背包)

    本来是个搜索题,但是自觉的成了背包! 多重用正序,01用逆序. 抽象出来一下,一个物体的体积为ai, 每次装入背包需要bi(在题目中为菜数量)分钟(这个题目只是bi为 1 而已)问在r分钟内,装比n大 ...

  8. 【vue】vue中ref用法

    1.获取当前元素: 例子: <div class="pop pos-a" :style="{ left: pop_x + 'px' ,top: pop_y + 'p ...

  9. Docker安装MySQL并配置远程访问

    1.docker search mysql 查看mysql版本 2.docker pull mysql 要选择starts最高的那个name 进行下载 3.docker images 查看下载好的镜像 ...

  10. 线程的synchronized、volatile及原子操作

    public class ThreadDemo7{ //structs2线程不安全 共享变量 //n++ 复合操作 对于volatile修饰的变量不安全 //原子操作 int value; //让方法 ...