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 相关文章推荐
jQuery 加上最后自己的验证
Nov 04 Javascript
网络图片延迟加载实现代码 超越jquery控件
Mar 27 Javascript
侧栏跟随滚动的简单实现代码
Mar 18 Javascript
jquery 表格的增行删行实现思路
Mar 21 Javascript
创建、调用JavaScript对象的方法集锦
Dec 24 Javascript
基于jQuery实现的扇形定时器附源码下载
Oct 20 Javascript
javascript基本语法
May 31 Javascript
JS实现留言板功能
Jun 17 Javascript
php中and 和 &amp;&amp;出坑指南
Jul 13 Javascript
elementUi vue el-radio 监听选中变化的实例代码
Jun 28 Javascript
javascript/jquery实现点击触发事件的方法分析
Nov 11 jQuery
解决Vue 移动端点击出现300毫秒延迟的问题
Jul 21 Javascript
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
PHP 图像尺寸调整代码
2010/05/26 PHP
修改apache配置文件去除thinkphp url中的index.php
2014/01/17 PHP
PHP XML Expat解析器知识点总结
2019/02/15 PHP
图片之间的切换
2006/06/26 Javascript
用jquery实现自定义风格的滑动条实现代码
2011/04/26 Javascript
关于html+ashx开发中几个问题的解决方法
2011/07/18 Javascript
jQuery 中使用JSON的实现代码
2011/12/01 Javascript
javascript的回调函数应用示例
2014/02/20 Javascript
javascript中解析四则运算表达式的算法和示例
2014/08/11 Javascript
PHPMyAdmin导入时提示文件大小超出PHP限制的解决方法
2015/03/30 Javascript
thinkphp实现无限分类(使用递归)
2015/12/19 Javascript
底部悬浮通栏可以关闭广告位的实现方法
2016/06/01 Javascript
ES6生成器用法实例分析
2017/04/10 Javascript
简单实现js放大镜效果
2017/07/24 Javascript
基于Datatables跳转到指定页的简单实例
2017/11/09 Javascript
Express本地测试HTTPS的示例代码
2018/06/06 Javascript
了解JavaScript中let语句
2019/05/30 Javascript
Vue项目配置跨域访问和代理proxy设置方式
2020/09/08 Javascript
深入理解Python 代码优化详解
2014/10/27 Python
python实现用户登录系统
2016/05/21 Python
基于Python __dict__与dir()的区别详解
2017/10/30 Python
Pycharm更换python解释器的方法
2018/10/29 Python
详解python做UI界面的方法
2019/02/27 Python
Django模型序列化返回自然主键值示例代码
2019/06/12 Python
浅谈pytorch 模型 .pt, .pth, .pkl的区别及模型保存方式
2020/05/25 Python
Flask中jinja2的继承实现方法及实例
2021/03/03 Python
马来西亚网上花店:FlowerAdvisor马来西亚
2020/01/03 全球购物
企业厂长岗位职责
2013/12/17 职场文书
九年级数学教学反思
2014/02/02 职场文书
化妆师职业生涯规划书
2014/02/16 职场文书
上班迟到检讨书
2014/09/15 职场文书
迁徙的鸟观后感
2015/06/09 职场文书
新娘父亲婚礼致辞
2015/07/27 职场文书
《分数乘法》教学反思
2016/02/24 职场文书
七个非常实用的Python工具包总结
2021/06/15 Python
SQL Server中使用表变量和临时表
2022/05/20 SQL Server