聊天室页面-->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. Python3 socket网络编程(一)

    Socket的定义 套接字是为特定网络协议(例如TCP/IP,ICMP/IP,UDP/IP等)套件对上的网络应用程序提供者提供当前可移植标准的对象.它们允许程序接受并进行连接,如发送和接受数据.为了建 ...

  2. centos7 多网卡绑定bond0 之mod4

    什么是mod4 mod=4,即:(802.3ad) IEEE 802.3ad Dynamic link aggregation(IEEE 802.3ad 动态链接聚合) 特点:创建一个聚合组,它们共享 ...

  3. 【文学文娱】《屌丝逆袭》-出任CEO、迎娶白富美、走上人生巅峰

    本文地址:http://www.cnblogs.com/aiweixiao/p/7759790.html 原文地址:(微信公众号) 原创 2017-10-30 微信号wozhuzaisi 程序员的文娱 ...

  4. 《Java大学教程》—第8章 通过继承扩展类

    8.2    继承(inheritance):继承是指在类之间共享属性和方法.继承关系是一种层次关系.在继承关系中位于顶部的类称为超类(或基类),位于下面的类称为子类(或派生类).类型转换(type ...

  5. Teradata数据库访问链条

  6. 【HNOI2018】排列

    [HNOI2018]排列 神仙贪心题. 题目说这么大堆东西就是想告诉你这是个森林,选了\(v\)的父亲后才能选\(v\). 我们设\(w_v\)为\(v\)所在联通块权值和,\(size_v\)表示\ ...

  7. 安装mysql5.6报错问题统计点

    报错1(su进入mysql属组时报错): [root@dbserver ~]# su - mysql Last login: Thu Aug 31 17:20:03 CST 2017 on pts/1 ...

  8. 转://云和恩墨的两道Oracle面试题

    真题1. 对于一个NUMBER(1)的列,如果查询中的WHERE条件分别是大于3和大于等于4,那么这二者是否等价? 答案:首先对于查询结果而言,二者没有任何区别.从这一点上讲无论是指定大于3还是指定大 ...

  9. oracle 11G direct path read 很美也很伤人

    direct path read在11g中,全表扫描可能使用direct path read方式,绕过buffer cache,这样的全表扫描就是物理读了. 在10g中,都是通过gc buffer来读 ...

  10. 在Python程序中的进程操作,multiprocess.Process模块

    在python程序中的进程操作 之前我们已经了解了很多进程相关的理论知识,了解进程是什么应该不再困难了,刚刚我们已经了解了,运行中的程序就是一个进程.所有的进程都是通过它的父进程来创建的.因此,运行起 ...