node.js中ws模块创建服务端和客户端,网页WebSocket客户端


Posted in Javascript onMarch 06, 2019

首先下载websocket模块,命令行输入

npm install ws

1.node.js中ws模块创建服务端

// 加载node上websocket模块 ws;
var ws = require("ws");
// 启动基于websocket的服务器,监听我们的客户端接入进来。
var server = new ws.Server({
 host: "127.0.0.1",
 port: 6080,
});
// 监听接入进来的客户端事件
function websocket_add_listener(client_sock) {
 // close事件
 client_sock.on("close", function() {
 console.log("client close");
 });
 // error事件
 client_sock.on("error", function(err) {
 console.log("client error", err);
 });
 // end 
 // message 事件, data已经是根据websocket协议解码开来的原始数据;
 // websocket底层有数据包的封包协议,所以,绝对不会出现粘包的情况。
 // 每解一个数据包,就会触发一个message事件;
 // 不会出现粘包的情况,send一次,就会把send的数据独立封包。
 // 如果我们是直接基于TCP,我们要自己实现类似于websocket封包协议就可以完全达到一样的效果;
 client_sock.on("message", function(data) {
 console.log(data);
 client_sock.send("Thank you!");
 });
 // end 
}
// connection 事件, 有客户端接入进来;
function on_server_client_comming (client_sock) {
 console.log("client comming");
 websocket_add_listener(client_sock);
}
server.on("connection", on_server_client_comming);
// error事件,表示的我们监听错误;
function on_server_listen_error(err) {
}
server.on("error", on_server_listen_error);
// headers事件, 回给客户端的字符。
function on_server_headers(data) {
 // console.log(data);
}
server.on("headers", on_server_headers);

2.node.js中ws模块创建客户端

var ws = require("ws");
// url ws://127.0.0.1:6080
// 创建了一个客户端的socket,然后让这个客户端去连接服务器的socket
var sock = new ws("ws://127.0.0.1:6080");
sock.on("open", function () {
 console.log("connect success !!!!");
 sock.send("HelloWorld1");
 sock.send("HelloWorld2");
 sock.send("HelloWorld3");
 sock.send("HelloWorld4");
 sock.send(Buffer.alloc(10));
});
sock.on("error", function(err) {
 console.log("error: ", err);
});
sock.on("close", function() {
 console.log("close");
});
sock.on("message", function(data) {
 console.log(data);
});

3.网页客户端创建(使用WebApi --->WebSocket)

<!DOCTYPE html>
<html>
<head>
 <title>skynet websocket example</title>
</head>
<body>
 <script>
 var ws = new WebSocket("ws://127.0.0.1:6080/index.html");
 ws.onopen = function(){
 alert("open");
 ws.send("WebSocket hellowrold!!");
 };
 ws.onmessage = function(ev){
 alert(ev.data);
 };
 ws.onclose = function(ev){
 alert("close");
 };
 ws.onerror = function(ev){
 console.log(ev);
 alert("error");
 };
 </script>
</body>
</html>

总结

以上就是这篇文章的全部内容了,希望本文的内容对大家的学习或者工作具有一定的参考学习价值,谢谢大家对三水点靠木的支持。如果你想了解更多相关内容请查看下面相关链接

Javascript 相关文章推荐
JS控制文本框textarea输入字数限制的方法
Jun 17 Javascript
jquery复选框全选/取消示例
Dec 30 Javascript
js通过classname来获取元素的方法
Nov 24 Javascript
利用js判断手机是否安装某个app的多种方案
Feb 13 Javascript
Vue组件化通讯的实例代码
Jun 23 Javascript
实例讲解DataTables固定表格宽度(设置横向滚动条)
Jul 11 Javascript
Angular设置别名alias的方法
Nov 08 Javascript
解决 viewer.js 动态更新图片导致无法预览的问题
May 14 Javascript
Weex开发之WEEX-EROS开发踩坑(小结)
Oct 16 Javascript
vue实现下拉菜单树
Oct 22 Javascript
nuxt 服务器渲染动态设置 title和seo关键字的操作
Nov 05 Javascript
Vue实现摇一摇功能(兼容ios13.3以上)
Jan 26 Vue.js
node.js中express模块创建服务器和http模块客户端发请求
Mar 06 #Javascript
微信小程序性能优化之checkSession的使用
Mar 06 #Javascript
详解在微信小程序的JS脚本中使用Promise来优化函数处理
Mar 06 #Javascript
移动端(微信等使用vConsole调试console的方法
Mar 05 #Javascript
利用Vconsole和Fillder进行移动端抓包调试方法
Mar 05 #Javascript
深入理解Puppeteer的入门教程和实践
Mar 05 #Javascript
[jQuery] 事件和动画详解
Mar 05 #jQuery
You might like
arguments对象
2006/11/20 Javascript
js 禁用浏览器的后退功能的简单方法
2008/12/10 Javascript
JavaScript Prototype对象
2009/01/07 Javascript
JQuery选择器特辑 详细小结
2012/05/14 Javascript
使用命令对象代替switch语句的写法示例
2015/02/28 Javascript
Node.js 去掉种子(torrent)文件里的邪恶信息
2015/03/27 Javascript
详解javascript数组去重问题
2015/11/06 Javascript
JSON简介以及用法汇总
2016/02/21 Javascript
AngularJS 让人爱不释手的八种功能
2016/03/23 Javascript
浅析JS操作DOM的一些常用方法
2016/05/13 Javascript
省市选择的简单实现(基于zepto.js)
2016/06/21 Javascript
Vue.js 2.0 和 React、Augular等其他前端框架大比拼
2016/10/08 Javascript
vue-cli如何快速构建vue项目
2017/04/26 Javascript
Webpack中css-loader和less-loader的使用教程
2017/04/27 Javascript
jQuery事件绑定和解绑、事件冒泡与阻止事件冒泡及弹出应用示例
2019/05/13 jQuery
微信小程序云开发之使用云存储
2019/05/17 Javascript
Vue data的数据响应式到底是如何实现的
2020/02/11 Javascript
javascript设计模式 ? 模板方法模式原理与用法实例分析
2020/04/23 Javascript
js实现限定范围拖拽的示例
2020/10/26 Javascript
[02:45]DOTA2英雄基础教程 伐木机
2013/12/23 DOTA
python连接sql server乱码的解决方法
2013/01/28 Python
浅谈Python中数据解析
2015/05/05 Python
浅谈python中的变量默认是什么类型
2016/09/11 Python
python入门前的第一课 python怎样入门
2018/03/06 Python
对Python random模块打乱数组顺序的实例讲解
2018/11/08 Python
PyCharm+Qt Designer+PyUIC安装配置教程详解
2019/06/13 Python
Python定时任务APScheduler的实例实例详解
2019/07/22 Python
django drf框架自带的路由及最简化的视图
2019/09/10 Python
python使用Thread的setDaemon启动后台线程教程
2020/04/25 Python
城市规划毕业生求职信
2013/10/10 职场文书
工商学院毕业生自荐信
2013/11/12 职场文书
地质灾害防治方案
2014/05/14 职场文书
商务英语专业求职信
2014/06/26 职场文书
医药公司采购员岗位职责
2014/09/12 职场文书
学生不参加考试检讨书
2015/02/19 职场文书
Pytest中skip和skipif的具体使用方法
2021/06/30 Python