Dev Blog

스크립트 & 소스코드 공유

실무에서 유용하게 쓰는 스크립트와 코드 조각을 블로그 게시판으로 저장하고 공유합니다.

3건의 글

Node.js + ws로 WebSocket 채팅방 만들기 예제

Node.js의 ws 라이브러리로 WebSocket 서버를 만들고, HTML+JavaScript로 그룹 채팅방을 구현한 예제다. npm으로 ws를 설치하고 8080 포트에서 서버를 띄운 뒤, 클라이언트가 보낸 메시지를 모든 연결된 클라이언트에 브로드캐스트한다. 사용자 이름은 IP+포트로 표시되며 서버·클라이언트 전체 코드를 제공한다.

使用ws创建WebSokcet服务器

Node.js原生API并未提供WebSocket的支持,因此,需要安装第三方包才能使用WebSocket功能。对于WebSocket的支持,在开源社区有非常多的选择,本例子采用的是“ws”框架(项目主页为https://github.com/websockets/ws)。

“ws”顾名思义是一个用于支持WebSocket客户端和服务器的框架。它易于使用,功能强大,且不依赖于其他环境。

想其他Node.js应用一样,使用ws的首选方式是使用npm来管理。以下命令行用于安装ws在应用里面:

npm install ws

具备了ws包之后,就可以创建WebSocket服务器了。以下是创建服务器的j简单示例:

const WebSocket = require('ws');
const server = new WebSocket.Server({ port: 8080 });

上述例子服务器启动在8080端口。

聊天服务器的需求

聊天服务器的业务需求比较简单,是一个群聊聊天室。换言之,所有人发送的消息大家都可以见到。

当有新用户连接到服务器时,会以该用户的“IP+端口”作为用户的名称。

服务器的实现

根据前面知识的学习,实现一个聊天服务器比较简单,完整代码如下

const WebSocket = require('ws');

const server = new WebSocket.Server({ port: 8080 });

server.on('open', function open() {
console.log('connected');
});

server.on('close', function close() {
console.log('disconnected');
});

server.on('connection', function connection(ws, req) {
const ip = req.connection.remoteAddress;
const port = req.connection.remotePort;
const clientName = ip + port;

console.log('%s is connected', clientName)

// 发送欢迎信息给客户端
ws.send("Welcome " + clientName);

ws.on('message', function incoming(message) {
console.log('received: %s from %s', message, clientName);

// 广播消息给所有客户端
server.clients.forEach(function each(client) {
if (client.readyState === WebSocket.OPEN) {
client.send( clientName + " -> " + message);
}
});

});

});

当客户端给服务器发送消息时,服务器会将该客户端的消息转发给所有客户端。

客户端的实现

客户端是通HTML+JavaScript的方式实现的。由于浏览器原生提供了WebSocket的API,所以并不需要ws框架的支持。

客户端client.html文件代码如下:

<body>
<script type="text/javascript">
var socket;
if (!window.WebSocket) {
window.WebSocket = window.MozWebSocket;
}
if (window.WebSocket) {
socket = new WebSocket("ws://localhost:8080/ws");
socket.onmessage = function (event) {
var ta = document.getElementById('responseText');
ta.value = ta.value + '\n' + event.data
};
socket.onopen = function (event) {
var ta = document.getElementById('responseText');
ta.value = "连接开启!";
};
socket.onclose = function (event) {
var ta = document.getElementById('responseText');
ta.value = ta.value + "连接被关闭";
};
} else {
alert("你的浏览器不支持 WebSocket!");
}

function send(message) {
if (!window.WebSocket) {
return;
}
if (socket.readyState == WebSocket.OPEN) {
socket.send(message);
} else {
alert("连接没有开启.");
}
}
</script>
<form onsubmit="return false;">
<h3>WebSocket 聊天室:</h3>
<textarea id="responseText" style="width: 500px; height: 300px;"></textarea>
<br>
<input type="text" name="message" style="width: 300px" value="Welcome to waylau.com">
<input type="button" value="发送消息" onclick="send(this.form.message.value)">
<input type="button" onclick="javascript:document.getElementById('responseText').value=''"
value="清空聊天记录">
</form>
</body>

运行应用

首先启动服务器。执行下面的命令:

node index.js

接着用浏览器直接打开client.html文件,可以看到如下的聊天界面。

聊天界面

打开多个聊天窗口,就能模拟多个用户之间的群聊了。

群聊界面

Node.js 윈도우에 설치하기 - LTS 다운로드 및 설치 과정

Windows에 Node.js를 설치하는 과정을 스크린샷과 함께 단계별로 정리한 글이다. nodejs.org에서 LTS 버전(16.14.1) 설치 파일을 내려받아 실행하고, 설치 마법사의 옵션(Node.js runtime, corepack, npm, PATH 등록)을 설명한 뒤 명령 프롬프트에서 node -v로 설치가 완료되었는지 확인한다.

Node.js는 Javascript로 작성된 프로그램을 운영체제상에서 일반 애플리케이션 프로그램처럼 실행시켜주는 런타임입니다. 특히, 서버 프로그램을 작성하는데 많이 사용되고 있는것 같습니다. React를 사용해보기 위해서 설치해 봅니다.

Node.js 한글 사이트는 https://nodejs.org/ko/ 입니다. 설치 파일을 다운로드 받습니다. 현재 최신 버전은 17.7.1이네요. 저는 16.14.1 LTS 버전은 다운받아 설치합니다(LTS는 Long Term Support의 약자로 오랫동안 지원하는 버전을 말합니다). 다운로드 받은 파일은 node-v16.14.1-x64.msi 이고, 크기는 27.1MB 정도 입니다.

Node.js 다운로드 페이지

다운받은 파일을 더블클릭하여 설치합니다.

설치 마법사 시작화면

라이센스에 동의합니다.

라이센스 동의 화면

설치 위치를 지정합니다. 기본 설치 위치는 C:\Program Files\nodejs\ 입니다.

설치위치 지정

사용자 설정화면 입니다. 모두 기본값을 사용하겠습니다.

- Node.js runtime : Node.js 런타임 본체가 되겠습니다.
- corepack manager : 패키지 관리자입니다. npm, yarn등의 패키지 관리자의 여러 버전을 설치하고, 시용여부를 지정하는 것이 가능합니다. 서로 다른 개발 또는 배포 환경에서 상호간의 설치 호환성을 유지하기 위해서 사용되어질 수 있다고 합니다.
- npm package manager : 패키지 관리자 입니다.
- Online documentation shortcuts : 온라인 문서에 대한 바로가기 입니다.
- Add to PATH : PATH 환경변수에 등록합니다.

사용자 설정

Native 모듈들을 위한 툴을 설치할지 선택합니다. 선택하지 않겠습니다. npm 모듈중에 컴파일이 필요한 것이 있을때 필요한 도구(Python, Visual Studio Build Toos)를 자동으로 설치할지 물어 보는 것입니다.

선택적 툴 설치여부 선택

반응형

<script async="" src="//pagead2.googlesyndication.com/pagead/js/adsbygoogle.js"></script> <script>(adsbygoogle = window.adsbygoogle || []).push({}); </script>

설치할 준비가 되었습니다. "Install"을 눌러 설치합니다.

설치준비 완료

설치중입니다.

설치중

설치가 완료되었습니다.

설치완료

설치확인을 위해서 명령창을 열고 "node -v" 명령으로 버전정보를 확인해 봅니다.

버전정보 확인

설치가 정상적으로 완료 되었습니다.

Windows Server 2016 KMS 인증 방법 (간단·빠른 활성화)

Windows Server 2016을 KMS 방식으로 빠르게 정품 인증하는 방법이다. 명령 프롬프트에서 slmgr /upk, slmgr.vbs /ipk 제품키, slmgr.vbs /skms KMS 서버, slmgr.vbs /ato 명령을 순서대로 실행하고, 데이터센터·표준·임베디드 에디션별 제품 키를 정리했다.

1.打开cmd控制台,按顺序输入以下命令,有报错不要管它。

slmgr /upk

slmgr.vbs /ipk CB7KF-BWN84-R7R2Y-793K2-8XDDG

slmgr.vbs /skms kms.lotro.cc

slmgr.vbs /ato

2.进入电脑属性激活服务器

Windows Server 2016 数据中心

CB7KF-BWN84-R7R2Y-793K2-8XDDG

Windows Server 2016 标准版

WC2BQ-8NRM3-FDDYY-2BFGV-KHKQY

Windows Server 2016 嵌入式版

JCKRF-N37P4-C2D82-9YXRT-4M63B



Let's create something great together.

프로젝트 문의 및 견적 요청은 언제든 환영합니다.