webSocket前端+nodejs后端简单案例多人在线聊天
2024-10-21 04:00:25
一:下面是一个简单的案例,回车发送消息,多人在线聊天
1.前端代码
<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title>WebSocket Chat</title>
</head>
<body>
<script type="text/javascript">
var socket;
if (!window.WebSocket) {
window.WebSocket = window.MozWebSocket;
}
if (window.WebSocket) {
socket = new WebSocket("ws://10.22.12.12:8080/ws");
socket.onmessage = function (event) {
var ta = document.getElementById('responseText');
ta.value = ta.value + '\n' + event.data
};
socket.onopen = function (event) {
var ta = document.getElementById('responseText');
ta.value = "连接开启!";
};
socket.onclose = function (event) {
var ta = document.getElementById('responseText');
ta.value = ta.value + "连接被关闭";
};
} else {
alert("你的浏览器不支持 WebSocket!");
}
function send(message) {
if (!window.WebSocket) {
return;
}
if (socket.readyState == WebSocket.OPEN) {
socket.send(message);
} else {
alert("连接没有开启.");
}
}
document.onkeydown=function(event){
var code = event.keyCode;
if(code ==13){ //这是键盘的enter监听事件
//绑定焦点,有可能不成功,需要多试试一些标签
document.getElementById("mySend").onclick();
setTimeout(()=>{
document.getElementById("myInput").value = ''
},50)
}
}
</script>
<form onsubmit="return false;">
<h3>WebSocket 聊天室:</h3>
<textarea id="responseText" style="width: 500px; height: 300px;"></textarea>
<br>
<input type="text" id="myInput" name="message" style="width: 300px" value="Hello~~~">
<input type="button" id="mySend" value="发送消息" onclick="send(this.form.message.value)">
<input type="button" onclick="javascript:document.getElementById('responseText').value=''"
value="清空聊天记录">
</form>
<br>
</body>
</html>
2.后端代码
const WebSocket = require('ws');
const server = new WebSocket.Server({ port: 8080 });
server.on('open', function open() {
console.log('connected');
});
server.on('close', function close() {
console.log('disconnected');
});
server.on('connection', function connection(ws, req) {
const ip = req.connection.remoteAddress;
const port = req.connection.remotePort;
const clientName = ip + port;
console.log('%s is connected', clientName)
// 发送欢迎信息给客户端
ws.send("Welcome " + clientName);
ws.on('message', function incoming(message) {
console.log('received: %s from %s', message, clientName);
// 广播消息给所有客户端
server.clients.forEach(function each(client) {
if (client.readyState === WebSocket.OPEN) {
client.send( clientName + " -> " + message);
}
});
});
});
参考文章:https://waylau.com/node.js-websocket-chat/
最新文章
- Configuring Autofac to work with the ASP.NET Identity Framework in MVC 5
- 在Windows上安装虚拟机详细图文教程
- Oracel EBS - Response
- NSDate,NSNumber,NSValue
- C++中析构函数的作用,
- php 数组定义、取值和遍历
- centos 服务器配置(一) 之端口占用
- eclipse中Java代码导入包,出现main.java前缀
- ubuntu下整合eclipse和javah生成jni头文件开发android的native程序
- 计算机网络分层(OSI七层、 TCP/IP四层)
- ebtables
- FusionCharts封装-Data
- [Swift]LeetCode715. Range 模块 | Range Module
- 【BZOJ2817】[ZJOI2012]波浪(动态规划)
- Asp.net有三大对象:HttpContext, HttpRequest, HttpResponse
- 在win10下使用docker快速搭建ruby开发环境
- 【Android】水平居中 垂直居中 中心居中
- 还原JavaScript的真实历史~
- Web 协议 HTTP1.0 HTTP1.1 SPDY HTTP2.0
- xshell显示隐藏窗口页签
热门文章
- 5.pygame快速入门-精灵和精灵组
- 快读《ASP.NET Core技术内幕与项目实战》WebApi3.1:WebApi最佳实践
- 探究Presto SQL引擎(4)-统计计数
- ES6 学习笔记(三)原始值与引用值
- pycharm系列---基本配置
- Linux---ls cd
- 使用Opencv4和YOLOv4(XTDrone)训练模型遇到问题的记录(二)
- 【云原生 · Kubernetes】部署 kube-proxy 组件
- JS图片放大镜功能实现
- netty系列之:在netty中使用proxy protocol