HTML5 - 开发一个自己的websocket服务器

应用:node.js

主要步骤:

  • 创建文件夹
  • 创建app.js(server入口,app为自定义命名)
  • 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 app.js (app这个名字不固定,具体看你的文件名叫啥)

服务端server.js 源码如下:

 1 const ws = require(‘nodejs-websocket‘);//引入依赖包
 2   const POST = 8080;//定义端口
 3 // 创建一个server
 4   const server = ws.createServer(connect => {
 5     //每次只要有新的用户加入,就会为当前用户创建一个connect对象,同时调用一下这个回调函数。
 6     console.log("New connection");
 7
 8     // text事件:接收用户请求,得到用户传输进来的数据。
 9     connect.on("text", data => {
10       // 每当接受到用户请求事件,这个回调函数就会被触发。
11       console.log("Received "+data);
12
13       // sendText/send 方法:接受到请求后,响应一个数据给用户。因为是connect调用,所以只给当前connet对应的用户发送,如果需要给所有用户发送(广播),需要connections这个数组
14       connect.sendText(data.toUpperCase()+"!!!");//如果直接返回一个data,就会像echo那个服务器一样的功能,接收到什么就返回什么
15     });
16
17     // 连接断开 触发close事件
18     connect.on("close", (code, reason) => {
19       console.log("connection closed");
20       code && console.log(code);
21       reason && console.log(reason);
22     });
23
24     // error:监听服务异常事件,放置因报错而断掉整个服务。
25     connect.on(‘error‘, ()=>{
26       // 如果触发了close事件,就会走error异常事件(刷新也会),所以必须加error
27       console.log(‘连接出现异常‘);
28     });
29   });
30 server.listen(POST, ()=>{
31     console.log(‘webSocket服务启动成功了,监听了端口‘+ POST);
32 });

客户端demo使用上述配置的服务器。 源码如下:

示例页面代码html:

1   <div class="demo">
2     <input type="text" placeholder="请输入要发送的内容" id="ipt">
3     <button id="btn">发送请求</button>
4     <p>
5       响应结果如下:
6     </p>
7     <div id="rst"></div>
8     <button id="closeBtn">断开连接</button>
9   </div>

示例页面代码js:

 1 // var websocket = new WebSocket(‘ws://echo.websocket.org‘);// 使用ws官方提供的服务器
 2 var websocket = new WebSocket(‘ws://localhost:8080‘); // 使用我自己配置的服务器,前提要去websocketServer文件夹中把服务启动一下:node server.js
 3 websocket.addEventListener(‘open‘, function (e) {
 4     console.log(e, websocket.readyState);
 5     // websocket.send(‘发送一个方法‘)
 6     // websocket.send(‘xing.org1^‘)
 7     btn.onclick = function (a) {
 8       // console.log(a)
 9       websocket.send(ipt.value);
10     }
11   });
12 // 接收返回值:
13   websocket.addEventListener(‘message‘, (e) => {
14     console.log(e);
15     rst.innerHTML = e.data;
16   });
17 closeBtn.onclick = function (e) {
18     console.log(e);
19     websocket.close(3000,‘主动请求断开连接吧‘);//断开连接
20   }
21   websocket.addEventListener(‘close‘, function (e) {
22     console.log(‘连接断开了‘, e);
23   }); 

connections实现聊天室广播:

即给所有的用户(server.connections)都发送消息(sendText):

function broadcast(server, msg) {// 广播函数

  server.connections.forEach(function (conn) {
    conn.sendText(msg)

  })

}

具体实现方案,见下篇:《websocket的应用 - 实现一个简易的聊天室效果。》

原文地址:https://www.cnblogs.com/padding1015/p/10987185.html

时间: 2024-07-28 23:35:58

HTML5 - 开发一个自己的websocket服务器的相关文章

自己动手模拟开发一个简单的Web服务器

开篇:每当我们将开发好的ASP.NET网站部署到IIS服务器中,在浏览器正常浏览页面时,可曾想过Web服务器是怎么工作的,其原理是什么?“纸上得来终觉浅,绝知此事要躬行”,于是我们自己模拟一个简单的Web服务器来体会一下. 一.请求-处理-响应模型 1.1 基本过程介绍 每一个HTTP请求都会经历三个步凑:请求-处理-响应:每当我们在浏览器中输入一个URL时都会被封装为一个HTTP请求报文发送到Web服务器,而Web服务器则接收并解析HTTP请求报文,然后针对请求进行处理(返回指定的HTML页面

Step by Step 使用HTML5开发一个星际大战游戏(2)

HTML5 Canvas Game: 玩家飞船 本系列博文翻译自以下文章 http://blog.sklambert.com/html5-canvas-game-the-player-ship/ Languages: HTML5, JavaScript Code: https://github.com/straker/galaxian-canvas-game/tree/master/part2 2.玩家飞船 上节,我们讲述了背景滚动的实现,本节我们来实现一下玩家飞船的移动和子弹的发射. 首先让我

Step by Step 使用HTML5开发一个星际大战游戏(1)

本系列博文翻译自以下文章 http://blog.sklambert.com/html5-canvas-game-panning-a-background/ Languages: HTML5, JavaScript Code: https://github.com/straker/galaxian-canvas-game/tree/master/part1 Part 1 最终的游戏演示界面如下: 控制:移动 –  (←↑↓→)箭头 射击 – 空格 The HTML5 Page <!DOCTYPE

根据Unix哲学来编写你的HTML5 Websocket服务器来实现全双工通信

websocketd代表WebSocket的守护进程 websocketd处理的是浏览器和服务器之间的WebSocket连接,它会启动你所指定的服务器端应用来对WebSockets进行处理,然后在浏览器和服务器应用之间进行消息的传递. 在20年前的话,有一项叫做CGI的技术做的工作类似,但现在这项技术将会被websocket所取代. 语言无关 只要你的服务器应用是可以从命令行进行运行的,你就可以为你的服务器应用编写WebSocket终端服务. 无需额外的库的支持 通过WebSocketd进行信息

如果用HTML5做一个在线视频聊天【原创】

首先使用node.js 搭建一个简易的 websocket服务器: var cons = new Array(); var ws = require('ws').Server; var server = new ws({ port: 8888 }); server.on('connection', function (ws) { console.log('new connection founded successfully'); cons.push(ws); ws.on('message',

谈谈如何使用Netty开发实现高性能的RPC服务器

RPC(Remote Procedure Call Protocol)远程过程调用协议,它是一种通过网络,从远程计算机程序上请求服务,而不必了解底层网络技术的协议.说的再直白一点,就是客户端在不必知道调用细节的前提之下,调用远程计算机上运行的某个对象,使用起来就像调用本地的对象一样.目前典型的RPC实现框架有:Thrift(facebook开源).Dubbo(alibaba开源)等等.RPC框架针对网络协议.网络I/O模型的封装是透明的,对于调用的客户端而言,它就认为自己在调用本地的一个对象.至

Netty开发实现高性能的RPC服务器

Netty开发实现高性能的RPC服务器 RPC(Remote Procedure Call Protocol)远程过程调用协议,它是一种通过网络,从远程计算机程序上请求服务,而不必了解底层网络技术的协议.说的再直白一点,就是客户端在不必知道调用细节的前提之下,调用远程计算机上运行的某个对象,使用起来就像调用本地的对象一样.目前典型的RPC实现框架有:Thrift(facebook开源).Dubbo(alibaba开源)等等.RPC框架针对网络协议.网络I/O模型的封装是透明的,对于调用的客户端而

自己动手,开发轻量级,高性能http服务器。

前言 http协议是互联网上使用最广泛的通讯协议了.web通讯也是基于http协议:对应c#开发者来说,asp.net core是最新的开发web应用平台.由于最近要开发一套人脸识别系统,对通讯效率的要求很高.虽然.net core对http处理很优化了,但是我决定开发一个轻量级http服务器:不求功能多强大,只求能满足需求,性能优越.本文以c#开发windows下http服务器为例. 经过多年的完善.优化,我积累了一个非常高效的网络库(参见我的文章:高性能通讯库).以此库为基础,开发一套轻量级

面向Web Cloud的HTML5 App开发实战:Browser&amp;HTML5&amp;CSS3&amp;PhoneGap&amp;jQuery Mobile&amp; WebSocket&amp;Node.js(2天)

如何理解Android架构设计的初心并开发出搭载Android系统并且具备深度定制和软硬整合能力特色产品,是本课程解决的问题. 课程以Android的五大核心:HAL.Binder.Native Service.Android Service(并以AMS和WMS为例).View System为主轴,一次性彻底掌握Android的精髓. 之所以是开发Android产品的必修课,缘起于: 1,     HAL是Android Framework&Application与底层硬件整合的关键技术和必修技