WebSocket实现一个聊天室
聊天室页面-->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实现一个聊天室的更多相关文章
- Java和WebSocket开发网页聊天室
小编心语:咳咳咳,今天又是聊天室,到现在为止小编已经分享了不下两个了,这一次跟之前的又不大相同,这一次是网页聊天室,具体怎么着,还请各位看官往下看~ Java和WebSocket开发网页聊天室 一.项 ...
- web即时通讯2--基于Spring websocket达到web聊天室
如本文所用,Spring4和websocket要构建web聊天室,根据框架SpringMVC+Spring+Hibernate的Maven项目,后台使用spring websocket进行消息转发和聊 ...
- 基于react+react-router+redux+socket.io+koa开发一个聊天室
最近练手开发了一个项目,是一个聊天室应用.项目虽不大,但是使用到了react, react-router, redux, socket.io,后端开发使用了koa,算是一个比较综合性的案例,很多概念和 ...
- 分享基于 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. ...
- 使用原生node写一个聊天室
在学习node的时候都会练习做一个聊天室的项目,主要使用socket.io模块和http模块.这里我们使用更加原始的方式去写一个在命令行聊天的聊天室. http模块,socket.io都是高度封装之后 ...
- 利用socket.io构建一个聊天室
利用socket.io来构建一个聊天室,输入自己的id和消息,所有的访问用户都可以看到,类似于群聊. socket.io 这里只用来做一个简单的聊天室,官网也有例子,很容易就做出来了.其实主要用的东西 ...
- Websocket直播间聊天室教程 - GoEasy快速实现聊天室
最近两年直播那个火啊,真的是无法形容!经常有朋友问起,我想实现一个直播间聊天或者我想开发一个聊天室, 要如何开始呢? 今天小编就手把手的教你用GoEasy做一个聊天室,当然也可以用于直播间内的互动.全 ...
随机推荐
- VS2017 + QT5 + C++开发环境搭建和计算器Demo测试
非常有帮助的参考资料: https://blog.csdn.net/gaojixu/article/details/82185694 该参考文献的主要流程: (1)QT下载安装:从官网下载QT,并记 ...
- td 元素属性 noWrap 防止折行、撑开及文字换行
最近调试程序,遇到如下问题: 也就是这个表格里面的文字被换行了,究其原因,主要是td中的width之和超过了100%导致的.谷歌了好久,终于发现,可以用noWrap="noWrap" ...
- ASP.NET -- WebForm -- 页面生命周期
ASP.NET -- WebForm -- 页面生命周期 ASP.NET 页运行时,此页将经历一个生命周期,在生命周期中将执行一系列处理步骤.这些步骤包括初始化.实例化控件.还原和维护状态.运行事件 ...
- JavaScript -- 时光流逝(二):js中数组的方法
JavaScript -- 知识点回顾篇(二):js中数组的方法 1. 数组 (1)定义数组,数组赋值 <script type="text/javascript"> ...
- Java入门(三):变量和运算符
上次谈到了Java的基本数据类型,今天接着聊Java的变量.运算符. 一.变量 1.变量的分类 变量分为成员变量.局部变量和常量,其中成员变量又分为实例变量.类变量. 2.变量的定义 语法:变量类型( ...
- 【Git】Git pull 强制覆盖本地文件
git fetch --all git reset --hard origin/master git pull 备注: git fetch 只是下载远程的库的内容,不做任何的合并 git reset ...
- 让vue-cli脚手架搭建的项目可以处理vue文件中postcss语法
图中&属于postcss的语法,这样书写样式可以清楚的看出选择器之前的层级关系,非常好用. 在利用vue-cli脚手架搭建的项目中如果不配置是不支持这种写法的,这样写不会报错,但是样式不生效. ...
- Linux配置本地yum源
最近在配置zabbix时,遇到CentOS 无法连接网络问题,搜索到一种配置本地yum源的方法,特此记录 一.联网安装预处理 配置缓存,修改/etc/yum.conf [main] cachedir= ...
- 关于connect by rownum与connect by leve
http://www.itpub.net/forum.php?mod=viewthread&tid=1570306 http://www.itpub.net/forum.php?mod=vie ...
- 第一章 mysql的体系结构与存储引擎
数据库从逻辑上可以分为两部分,一部分负责存储即文件系统,这部分有个更时髦的名字叫存储引擎,存储引擎负责如何把数据以及索引相关的内容以合适的形式组织并存储到磁盘上.另一部分为server部分,负责和用户 ...