用nodejs搭建websocket服务器

前端之家收集整理的这篇文章主要介绍了用nodejs搭建websocket服务器前端之家小编觉得挺不错的,现在分享给大家,也给大家做个参考。

简单开始

1.安装node。

2.安装ws模块

ws:是nodejs的一个WebSocket库,可以用来创建服务。

3.server.js

在项目里面新建一个server.js,创建服务,指定8181端口,将收到的消息log出来。

4.建立一个client.html。

页面上建立一个WebSocket的连接。用send方法发送消息。

页面

WebSocket Echo Demo <Meta name="viewport" content="width=device-width,initial-scale=1"/>

运行之后如下,服务端即时获得客户端的消息。

模拟股票

上面的例子很简单,只是为了演示如何运用nodejs的ws创建一个WebSocket服务器。且可以接受客户端的消息。那么下面这个例子演示股票的实时更新。客服端只需要连接一次,服务器端会不断地发送新数据,客户端收数据后更新UI.页面如下,有五只股票,开始和停止按钮测试连接和关闭

服务端:

1.模拟五只股票的涨跌。

2.连接建立之后就开始更新数据

支持文本和二进制数据 console.log("更新",JSON.stringify(stocksObj)); }
}

}
var clientStockUpdater = setInterval(function () {
sendStockUpdates(ws);
},1000);
ws.on('message',function (message) {
var stockRequest = JSON.parse(message);//根据请求过来的数据来更新。
console.log("收到消息",stockRequest);
clientStocks = stockRequest['stocks'];
sendStockUpdates(ws);
});

客户端:

建立连接:

onopen直接只有在连接成功后才会触发,在这个时候将客户端需要请求的股票发送给服务端。

originalValue) { valElem.addClass('label-success'); valElem.removeClass('label-danger'); } } // 处理受到的消息 ws.onmessage = function (e) { var stocksData = JSON.parse(e.data); console.log(stocksData); for (var symbol in stocksData) { if (stocksData.hasOwnProperty(symbol)) { changeStockEntry(symbol,stocks[symbol],stocksData[symbol]); stocks[symbol] = stocksData[symbol]; } } }; }

updataUI();

运行效果如下:只需要请求一次,数据就会不断的更新,效果是不是很赞,不用轮询,也不用长连接那么麻烦了。文章末尾会附上所有源码。

(美股的涨跌和A股的颜色是反的,即红跌绿涨)

实时聊天

上面的例子是连接建立之后,服务端不断给客户端发送数据。接下来例子是一个简单的聊天室类的例子。可以建立多个连接。

1.安装node-uuid模块,用来给每个连接一个唯一号。

2.服务端消息发送

消息类型分notification和message两种,前者是提示信息,后者是聊天内容。消息还包含一个id、昵称和消息内容。在上一节有学习到readyState有四个值,OPEN表示连接建立可以发送消息。如果页面关闭了,为WebSocket.CLOSE。

3.服务端处理连接

每新增加一个连接,都会发送一条匿名用户的加入的提示消息,如果消息中带有“/nick” 认为这一个修改昵称的消息。然后更新客户端的昵称。其他都会当做聊天消息处理。

= 2) { var old_nickname = nickname; nickname = nickname_array[1]; var nickname_message = "Client " + old_nickname + " changed to " + nickname; wsSend("nick_update",nickname_message); } } else { wsSend("message",message); } });

处理连接关闭

4.客户端

没有启动时,页面如下,change按钮用来修改昵称。


js:

显示 function appendLog(type,message) { if (typeof message == "undefined") return; var messages = document.getElementById('messages'); var messageElem = document.createElement("li"); var preface_label; if (type === 'notification') { preface_label = ""; } else if (type == 'nick_update') { preface_label = ""; } else { preface_label = ""; } var message_text = "

" + preface_label + "" + message + "

"; messageElem.innerHTML = message_text; messages.appendChild(messageElem); } //收到消息处理 ws.onmessage = function (e) { var data = JSON.parse(e.data); nickname = data.nickname; appendLog(data.type,data.nickname,data.message); console.log("ID: [%s] = %s",data.id,data.message); } ws.onclose = function (e) { appendLog("Connection closed"); console.log("Connection closed"); } //发送消息 function sendMessage() { var messageField = document.getElementById('message'); if (ws.readyState === WebSocket.OPEN) { ws.send(messageField.value); } messageField.value = ''; messageField.focus(); } //修改名称 function changName() { var name = $("#name").val(); if (ws.readyState === WebSocket.OPEN) { ws.send("/nick " + name); } }

运行结果:

页面关闭之后,连接马上断开。

这种实时响应的体验简直不能太爽,代码也清爽了,前端体验也更好,客户端不用一直发请求,服务端不用等着被轮询。

小结:上面例子的代码都很好理解,接下来学习WebSocket协议。

demo下载:

以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持编程之家。

原文链接:https://www.f2er.com/nodejs/42153.html

猜你在找的Node.js相关文章