HTML5 - 开发一个自己的websocket服务器
应用:node.js
主要步骤:
- 创建文件夹
- 创建server.js(服务入口,server为自定义文件的命名)
- npm init -y (快速创建一个package.json文件)
- 依赖包安装:nodejs-websocket (github安装讲解)
- npm i nodejs-websocket
- 依赖包在appjs中的使用 (github how to use讲解)
https://github.com/sitegui/nodejs-websocket#how-to-use-it
配置完毕后启动:
命令行输入> node server.js (server这个名字不固定,具体看你的文件名叫啥)
服务端server.js 源码如下:
const ws = require('nodejs-websocket');//引入依赖包
const POST = 8080;//定义端口
// 创建一个server
const server = ws.createServer(connect => {
//每次只要有新的用户加入,就会为当前用户创建一个connect对象,同时调用一下这个回调函数。
console.log("New connection");
// text事件:接收用户请求,得到用户传输进来的数据。
connect.on("text", data => {
// 每当接受到用户请求事件,这个回调函数就会被触发。
console.log("Received "+data);
// sendText/send 方法:接受到请求后,响应一个数据给用户。因为是connect调用,所以只给当前connet对应的用户发送,如果需要给所有用户发送(广播),需要connections这个数组
connect.sendText(data.toUpperCase()+"!!!");//如果直接返回一个data,就会像echo那个服务器一样的功能,接收到什么就返回什么
});
// 连接断开 触发close事件
connect.on("close", (code, reason) => {
console.log("connection closed");
code && console.log(code);
reason && console.log(reason);
});
// error:监听服务异常事件,放置因报错而断掉整个服务。
connect.on('error', ()=>{
// 如果触发了close事件,就会走error异常事件(刷新也会),所以必须加error
console.log('连接出现异常');
});
});
server.listen(POST, ()=>{
console.log('webSocket服务启动成功了,监听了端口'+ POST);
});
客户端demo使用上述配置的服务器。 源码如下:
示例页面代码html:
<div class="demo">
<input type="text" placeholder="请输入要发送的内容" id="ipt">
<button id="btn">发送请求</button>
<p>
响应结果如下:
</p>
<div id="rst"></div>
<button id="closeBtn">断开连接</button>
</div>
示例页面代码js:
// var websocket = new WebSocket('ws://echo.websocket.org');// 使用ws官方提供的服务器
var websocket = new WebSocket('ws://localhost:8080'); // 使用我自己配置的服务器,前提要去websocketServer文件夹中把服务启动一下:node server.js
websocket.addEventListener('open', function (e) {
console.log(e, websocket.readyState);
// websocket.send('发送一个方法')
// websocket.send('xing.org1^')
btn.onclick = function (a) {
// console.log(a)
websocket.send(ipt.value);
}
});
// 接收返回值:
websocket.addEventListener('message', (e) => {
console.log(e);
rst.innerHTML = e.data;
});
closeBtn.onclick = function (e) {
console.log(e);
websocket.close(3000,'主动请求断开连接吧');//断开连接
}
websocket.addEventListener('close', function (e) {
console.log('连接断开了', e);
});
connections实现聊天室广播:
即给所有的用户(server.connections)都发送消息(sendText):
function broadcast(server, msg) {// 广播函数
server.connections.forEach(function (conn) {
conn.sendText(msg)
})
}
具体实现方案,见下篇:《websocket的应用 - 实现一个简易的聊天室效果。》
HTML5 - 开发一个自己的websocket服务器的更多相关文章
- 自己动手模拟开发一个简单的Web服务器
开篇:每当我们将开发好的ASP.NET网站部署到IIS服务器中,在浏览器正常浏览页面时,可曾想过Web服务器是怎么工作的,其原理是什么?“纸上得来终觉浅,绝知此事要躬行”,于是我们自己模拟一个简单的W ...
- Step by Step 使用HTML5开发一个星际大战游戏(1)
本系列博文翻译自以下文章 http://blog.sklambert.com/html5-canvas-game-panning-a-background/ Languages: HTML5, Jav ...
- Step by Step 使用HTML5开发一个星际大战游戏(2)
HTML5 Canvas Game: 玩家飞船 本系列博文翻译自以下文章 http://blog.sklambert.com/html5-canvas-game-the-player-ship/ L ...
- 实现一个websocket服务器-理论篇
本文是Writing WebSocket servers的中文文档,翻译自MDNWriting WebSocket servers.篇幅略长,个人能力有限难免有所错误,抛砖引玉共同进步. websoc ...
- 根据Unix哲学来编写你的HTML5 Websocket服务器来实现全双工通信
websocketd代表WebSocket的守护进程 websocketd处理的是浏览器和服务器之间的WebSocket连接,它会启动你所指定的服务器端应用来对WebSockets进行处理,然后在浏览 ...
- 如何实现websocket服务器-理论篇
WebSocket 服务器简单来说就是一个遵循特殊协议监听服务器任意端口的tcp应用.搭建一个定制服务器的任务通常会让让人们感到害怕.然而基于实现一个简单的Websocket服务器没有那么麻烦. 一个 ...
- 谈谈如何使用Netty开发实现高性能的RPC服务器
RPC(Remote Procedure Call Protocol)远程过程调用协议,它是一种通过网络,从远程计算机程序上请求服务,而不必了解底层网络技术的协议.说的再直白一点,就是客户端在不必知道 ...
- Netty开发实现高性能的RPC服务器
Netty开发实现高性能的RPC服务器 RPC(Remote Procedure Call Protocol)远程过程调用协议,它是一种通过网络,从远程计算机程序上请求服务,而不必了解底层网络技术的协 ...
- 自己动手,开发轻量级,高性能http服务器。
前言 http协议是互联网上使用最广泛的通讯协议了.web通讯也是基于http协议:对应c#开发者来说,asp.net core是最新的开发web应用平台.由于最近要开发一套人脸识别系统,对通讯效率的 ...
随机推荐
- Java学习:File类
Java学习:File类 File类的概述 重点:记住这三个单词 绝对路径和相对路径 File类的构造方法 File类判断功能的方法 File类创建删除功能的方法 File类获取(文件夹)目录和文件夹 ...
- 深入V8引擎-初始化之InitPlatform
上一篇其实想讲初始化的第二步,但是内容比较无聊,所以换了一个话题,谈了谈v8的命名空间和宏,稍微轻松一下. 在这里还是接着说说初始化过程,毕竟写博客的初衷是对自己努力的记录,不是为了吸粉,这篇没图,对 ...
- EF Core中如何设置数据库表自己与自己的多对多关系
本文的代码基于.NET Core 3.0和EF Core 3.0 有时候在数据库设计中,一个表自己会和自己是多对多关系. 在SQL Server数据库中,现在我们有Person表,代表一个人,建表语句 ...
- 让您的WinForm控件快速支持拖拽文件
实现原理:使用扩展方法. /// <summary> /// 控件扩展 /// </summary> public static class ControlExt { /// ...
- PIE SDK Alpha通道数据渲染
1. 功能简介 在计算机图形学中,一个RGB颜色模型的真彩图形,用由红.绿.蓝三个色彩信息通道合成的,每个通道用了8位色彩深度,共计24位,包含了所有彩色信息.为实现图形的透明效果,采取在图形文件的 ...
- 将Python源程序打包成可独立执行的文件
有时候需要将编写好的脚本发送给别人,但是在没有安装运行环境或依赖库的情况下,Python脚本程序无法执行.PyInstaller工具可以快速的将python脚本打包成一个二进制可执行的exe程序,并且 ...
- 微服务架构 ------ 插曲 Linux平台 Ubuntu的安装
1.一定要通过自定义安装 2.选择的硬件兼容性选择 14.x 这里介绍一下红框内的东西,是为了做虚拟存储使用的,也就是一批服务器对外展示位一个服务器,类似于服务器集群 3.选择稍后安装操作系统,如 ...
- 详解Vue中的虚拟DOM
摘要: 什么是虚拟DOM? 作者:浪里行舟 Fundebug经授权转载,版权归原作者所有. 前言 Vue.js 2.0引入Virtual DOM,比Vue.js 1.0的初始渲染速度提升了2-4倍,并 ...
- Android 9.0网络权限适配
在做Android开发时,使用华为的p20和平板(均为Android 9.0)测试时,发现不能使用WIFI网络,一番郁闷纠结查找后 直接上方法: 在res文件夹下创建xml文件夹,在xml里面创建文件 ...
- SQOOP的使用方法
Sqoop是个命令行工具,用来在Hadoop和rdbms之间传输数据. 以Hadoop的角度看待数据流向,从rdbms往Hadoop是导入用sqoop import命令,反之从hadoop往rdbms ...