Node 기반js TCP 채팅 서버 구축
:zhanhailiang :2014-11-23
원리:
서버 측은 모든 클라이언트 연결 목록을 유지합니다.
서버가 어떤 클라이언트의 메시지를 받았을 때 다른 클라이언트에게 연결합니다.
클라이언트 연결이 종료되면 클라이언트 연결 목록에서 제거합니다.
구현:
var net = require('net');
var server = net.createServer();
var sockets = [];
// accept connection
server.on('connection', function(socket) {
console.log('got a new connection');
//
sockets.push(socket);
//
socket.on('data', function(data) {
console.log('got data:', data);
var index = sockets.indexOf(socket);
sockets.forEach(function(otherSocket) {
if (otherSocket !== socket) {
otherSocket.write(new Buffer(index + ' say:'));
otherSocket.write(data);
}
});
});
//
socket.on('close', function() {
console.log('connection closed');
var index = sockets.indexOf(socket);
sockets.splice(index, 1);
});
});
server.on('error', function(err) {
console.log('Server error:', err.message);
});
server.on('close', function() {
console.log('Server closed');
});
server.listen(4001);
전체 코드:https://github.com/billfeller/professional-nodejs/blob/master/chapter10/chat_server.js
서버를 시작하려면:
[root@~/wade/nodejs/professional-nodejs/chapter10]# node chat_server.js
got a new connection
got a new connection
got a new connection
got data: <Buffer 77 68 61 74 20 69 73 20 79 6f 75 72 20 6e 61 6d 65 0d 0a>
got data: <Buffer 69 20 61 6d 20 62 69 6c 6c 0d 0a>
got data: <Buffer 69 20 61 6d 20 66 65 6c 6c 65 72 0d 0a>
got data: <Buffer 69 20 61 6d 20 7a 75 63 6b 2c 20 6e 69 63 65 20 74 6f 20 6d 65 65 74 20 79 6f 75 0d 0a>
got data: <Buffer 6d 65 0d 0a>
got data: <Buffer 6d 65 0d 0a>
got data: <Buffer 74 6f 6f 0d 0a>
세 개의 클라이언트 연결을 순서대로 시작하고 채팅을 시작합니다.
[root@~]# telnet 127.0.0.1 4001
Trying 127.0.0.1...
Connected to 127.0.0.1.
Escape character is '^]'.
what is your name
1 say:i am bill
2 say:i am feller
i am zuck, nice to meet you
1 say:me
2 say:me
2 say:too
[root@~]# telnet 127.0.0.1 4001
Trying 127.0.0.1...
Connected to 127.0.0.1.
Escape character is '^]'.
0 say:what is your name
i am bill
2 say:i am feller
0 say:i am zuck, nice to meet you
me
2 say:me
2 say:too
[root@~]# telnet 127.0.0.1 4001
Trying 127.0.0.1...
Connected to 127.0.0.1.
Escape character is '^]'.
0 say:what is your name
1 say:i am bill
i am feller
0 say:i am zuck, nice to meet you
1 say:me
me
too
참고: Professional Node.js Chapter10 Building TCP Server
이 내용에 흥미가 있습니까?
현재 기사가 여러분의 문제를 해결하지 못하는 경우 AI 엔진은 머신러닝 분석(스마트 모델이 방금 만들어져 부정확한 경우가 있을 수 있음)을 통해 가장 유사한 기사를 추천합니다:
다양한 언어의 JSONJSON은 Javascript 표기법을 사용하여 데이터 구조를 레이아웃하는 데이터 형식입니다. 그러나 Javascript가 코드에서 이러한 구조를 나타낼 수 있는 유일한 언어는 아닙니다. 저는 일반적으로 '객체'{}...
텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
CC BY-SA 2.5, CC BY-SA 3.0 및 CC BY-SA 4.0에 따라 라이센스가 부여됩니다.