http协议单向请求,只能客户端向服务器发送消息,然而websocket一旦双方建立连接就可以双方通信,更加深层次的用法是websocket可以做基础,然后不同的客户端可以通过websocket连接可以实现实时通信,同时结合webrtc相关技术可以实现音视频的双向连接。

在此只做简单的websocket连接。

需要安装ws: npm install ws 

 客户端代码:

   index.html:

<html lang="en">
<head>
<meta charset="utf-8">
<meta id="theme-color" name="theme-color" content="#fff">
<base target="_blank">
<title>WebSocket</title>
<link rel="stylesheet" href="main.css">
</head>
<body>
<div id="container">
<button id="connectButton">Connect</button>
<button id="disconnectButton" disabled>Disconnect</button>
<div id="sendText">
<label for="textInput">Send text:</label>
<input id="textInput" type="text" />
</div>
<button id="sendButton" disabled>Send</button>
<div id="output">
<label for="log">Response:</label>
<div id="log" class="log"></div>
</div>
<script src="main.js"></script>
</div>
</body>
</html>
 
main.js:
'use strict';
var ws, serverInput, textInput, log,
connectButton, disconnectButton, sendButton;
serverInput = document.getElementById('serverInput');
textInput = document.getElementById('textInput');
log = document.getElementById('log');
connectButton = document.getElementById('connectButton');
disconnectButton = document.getElementById('disconnectButton');
sendButton = document.getElementById('sendButton');
connectButton.addEventListener('click', clickConnect, false);
disconnectButton.addEventListener('click', clickDisconnect, false);
sendButton.addEventListener('click', clickSend, false);
function clickConnect() {
ws = new WebSocket("ws://127.0.0.1:8888");
ws.onopen = function(evt) {
logMessage('', 'Connected');
connectButton.disabled = true;
disconnectButton.disabled = false;
sendButton.disabled = false;
};
ws.onclose = function(evt) {
logMessage('err', 'Disconnected');
connectButton.disabled = false;
disconnectButton.disabled = true;
sendButton.disabled = true;
};

//客户端接收到服务端返回的信息

ws.onmessage = function(evt) {
logMessage('msg', 'Received: ' + evt.data);
};
ws.onerror = function(evt) {
logMessage('err', 'Error: ' + evt.data);
};
}
function clickDisconnect() {
ws.close();
}
function clickSend() {
logMessage('send', 'Sent: ' + textInput.value);
ws.send(textInput.value);
}
function logMessage(type, msg) {
log.innerHTML += '<p class="' + type + '">' + msg + '</p>';
}
服务端代码
index.js:
const WebSocketServer = require('ws').Server;
const wss = new WebSocketServer({ port: 8888 });
// 一旦与之连接就出发connection事件
wss.on('connection', function (ws) {
console.log("connected");
// 客户端反馈给服务端的信息
ws.on('message', function (message) {
// 服务器给用户反馈会信息
ws.send(message);
console.log(message);
});
})
console.log("websocket server running at ")

node搭建简易的websocket服务的更多相关文章

  1. 使用ruby搭建简易的http服务和sass环境

    使用ruby搭建简易的http服务和sass环境 由于在通常的前端开发情况下,我们会有可能需要一个http服务,当然你可以选择自己写一个node的http服务,也比较简单,比如下面的node代码: v ...

  2. nodejs搭建简单的websocket服务端

    创建websocket服务端使用了nodejs-websocket ,首先要安装nodejs-websocket,在项目的目录下: npm install nodejs-websocket 1.搭建w ...

  3. 【从零开始】用node搭建一个jsonp&json服务

    目录: 一.介绍 二.node安装 三.webstorm配置node环境 四.代码介绍 五.如何使用 六.自定义域名 七.其他 一.介绍 1.背景     日常工作中,跟后端商定好接口格式后:通常采用 ...

  4. nodejs搭建简易的rpc服务

    这里主要使用的是jayson包,使用jayson实现rpc server端十分简单,如下: var jayson = require('jayson') // create a server var ...

  5. go服务端----使用dotweb框架搭建简易服务

    使用dotweb框架搭建简易服务 go语言web框架挺多的,所谓琳琅满目,里面也有很多优秀的,比如echo.beego等,但体验下来,总是觉得哪里有点小疙瘩,后来才明白过来,echo太简单,很多日常使 ...

  6. 使用node搭建服务时,服务可以启动,但是无法访问

    一开始搭建的是没有问题,能够正常启动和访问,然后吃了个饭回来就变成只能启动,浏览器访问不了了. 说真的,这是一个常识问题.使用node搭建服务访问本地文件,服务搭建的没有问题,能够正常启动.但是在浏览 ...

  7. Netty 搭建 WebSocket 服务端

    一.编码器.解码器 ... ... @Autowired private HttpRequestHandler httpRequestHandler; @Autowired private TextW ...

  8. 搭建微信小程序服务

    准备域名和证书 任务时间:20min ~ 40min 小程序后台服务需要通过 HTTPS 访问,在实验开始之前,我们要准备域名和 SSL 证书. 域名注册 如果您还没有域名,可以在腾讯云上选购,过程可 ...

  9. 腾讯云&搭建微信小程序服务

    准备域名和证书 任务时间:20min ~ 40min 小程序后台服务需要通过 HTTPS 访问,在实验开始之前,我们要准备域名和 SSL 证书. 域名注册 如果您还没有域名,可以在腾讯云上选购,过程可 ...

随机推荐

  1. ctype.h

    isalpha:int isalpha(char ch);检查ch是否是字母.是字母返回非0,否则返回0. iscntrl: int iscntrl(int ch); 检查ch是否控制字符(其ASCI ...

  2. 结对作业_core组

    github地址:https://github.com/ljw-wakeup/expression_project2 对于这种结对的工作,由于有过电子设计实践的基础,大概知道建一个工程需要做的事,有点 ...

  3. HTML5 浏览器支持

    css重置 header, section, footer, aside, nav, main, article, figure { display: block; } 为HTML添加新的元素 < ...

  4. ORM-Model操作

    django为使用一种新的方式,即:关系对象映射(Object Relational Mapping,简称ORM). django中遵循 Code Frist 的原则,即:根据代码中定义的类来自动生成 ...

  5. 初涉FlaskWeb开发----基础篇

    1.web程序运行的基本流程 {客户端发送请求 <-----> 服务器返回响应} 2.使用框架可以降低开发难度,提高开发效率. 3.Flask框架的基本认识: 特点:用Python语言实现 ...

  6. mysql数据库的备份

    有时会遇到需要重装虚拟机的情况,这时候之前创建好的数据库就需要备份啦,等重新装好虚拟机直接导入就可以正常使用. 数据库备份大体分为两步: 第一步.导出数据库,因为是备份,会将所有的数据库导出,因此需要 ...

  7. Android测试中常用的adb命令

    进入root权限adb root adb remount 重启手机 adb reboot 查看手机devices版本(adb是否连接手机) adb devices 点亮手机电源键/菜单键/home键 ...

  8. 中文dumps显示

    json.dumps(tuwen_attention_dict_set, ensure_ascii=False)

  9. ZoomCharts

    net chart 配置links没有id的话,画图的links会丢失

  10. 几个NAND/NOR门可以表示一个XOR门?

    这段时间就是在看测试相关的东西,无意之中发现了ISCAS85中有个名词EXOR,愣了一下反应过来应该还是异或门,毕竟叫exclusive-OR gate,其中文档中还提到了一句一个异或门可以由四个与非 ...