一:下面是一个简单的案例,回车发送消息,多人在线聊天

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/

最新文章

  1. Configuring Autofac to work with the ASP.NET Identity Framework in MVC 5
  2. 在Windows上安装虚拟机详细图文教程
  3. Oracel EBS - Response
  4. NSDate,NSNumber,NSValue
  5. C++中析构函数的作用,
  6. php 数组定义、取值和遍历
  7. centos 服务器配置(一) 之端口占用
  8. eclipse中Java代码导入包,出现main.java前缀
  9. ubuntu下整合eclipse和javah生成jni头文件开发android的native程序
  10. 计算机网络分层(OSI七层、 TCP/IP四层)
  11. ebtables
  12. FusionCharts封装-Data
  13. [Swift]LeetCode715. Range 模块 | Range Module
  14. 【BZOJ2817】[ZJOI2012]波浪(动态规划)
  15. Asp.net有三大对象:HttpContext, HttpRequest, HttpResponse
  16. 在win10下使用docker快速搭建ruby开发环境
  17. 【Android】水平居中 垂直居中 中心居中
  18. 还原JavaScript的真实历史~
  19. Web 协议 HTTP1.0 HTTP1.1 SPDY HTTP2.0
  20. xshell显示隐藏窗口页签

热门文章

  1. 5.pygame快速入门-精灵和精灵组
  2. 快读《ASP.NET Core技术内幕与项目实战》WebApi3.1:WebApi最佳实践
  3. 探究Presto SQL引擎(4)-统计计数
  4. ES6 学习笔记(三)原始值与引用值
  5. pycharm系列---基本配置
  6. Linux---ls cd
  7. 使用Opencv4和YOLOv4(XTDrone)训练模型遇到问题的记录(二)
  8. 【云原生 · Kubernetes】部署 kube-proxy 组件
  9. JS图片放大镜功能实现
  10. netty系列之:在netty中使用proxy protocol