Skip to content

Commit 5b75029

Browse files
committed
v2.0.0: support client and server
1 parent 8afeaef commit 5b75029

9 files changed

+571
-210
lines changed

README.md

+41-5
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,5 @@
1-
# node-socket for client
2-
Based on node.js tcp socket of TLV package structure (Node端基于TLV二进制协议格式进行封装的socket工具库,包括粘包断包处理)
1+
# node-socket
2+
Based on node.js tcp socket of TLV packet structure (Node端基于TLV二进制协议格式进行封装的socket工具库,包括粘包断包处理)
33

44

55
## Install
@@ -12,8 +12,44 @@ $ npm install --save node-socket
1212
## Usage
1313

1414
```js
15-
const socket = require('node-socket')
16-
socket.connect(port, host, onConnected, onReceived, onClosed)
15+
// for client
16+
const socket = require('node-socket').client
17+
socket.connect(options, onConnected, onReceived)
1718

18-
//=> @see example.js
19+
function onReceived (tag, value) {
20+
switch (tag){
21+
case TAG_FROM_REGIST_SUCCESS:
22+
23+
// send message to server
24+
socket.send(1, { token: '123' })
25+
26+
break;
27+
case TAG_FROM_REGIST_FAIL:
28+
29+
break;
30+
}
31+
}
32+
33+
34+
// for server
35+
const server = require('node-socket').server
36+
37+
var options = {
38+
port: 11000,
39+
timeout: 15000,
40+
heartbeatTag: 0,
41+
heartbeatInterval: 7000,
42+
recreateInterval: 1000
43+
}
44+
45+
server.listen(options, onClientConnected, onClientDisconncted, onClientReceived)
46+
47+
function onClientReceived (tag, value, from) {
48+
// server.broadcast(tag, value) // all
49+
server.broadcast(tag, value, null, from) // all, except from
50+
// server.broadcast(tag, value, clientList, from);
51+
}
52+
53+
//=> @see test_server.js
54+
//=> @see test_client.js
1955
```

example.js

-53
This file was deleted.

index.js

+3-139
Original file line numberDiff line numberDiff line change
@@ -1,140 +1,4 @@
1-
var net = require("net");
2-
var ExBuffer = require("./lib/ExBuffer");
3-
4-
var client = null;
5-
var exBuffer = null;
6-
var connectCallback = null;
7-
var receiveCallback = null;
8-
var closeCallback = null;
9-
var serverPort = null;
10-
var serverHost = null;
11-
var hasShutdown = false;
12-
var debuger = console.log;
13-
14-
function connect(port, host, onConnected, onReceived, onClosed){
15-
close(false);
16-
17-
if (port){
18-
serverPort = port;
19-
}
20-
if (host){
21-
serverHost = host;
22-
}
23-
if (onConnected){
24-
connectCallback = onConnected;
25-
}
26-
if (onReceived){
27-
receiveCallback = onReceived;
28-
}
29-
if (onClosed){
30-
closeCallback = onClosed;
31-
}
32-
33-
client = net.connect(serverPort, serverHost, function(){
34-
debuger('Client connected: ' + serverHost + ":" + serverPort);
35-
36-
if (typeof connectCallback === "function"){
37-
connectCallback();
38-
}
39-
40-
exBuffer = new ExBuffer().int8Tag().uint32Head().bigEndian();
41-
exBuffer.on('data', onReceivePackData);
42-
43-
client.on('data', function(data) {
44-
exBuffer.put(data);
45-
});
46-
47-
client.on('end', function() {
48-
debuger('Client disconnected from server');
49-
if (typeof closeCallback === "function"){
50-
closeCallback();
51-
}
52-
});
53-
54-
client.on('timeout', function() {
55-
debuger('The socket times out.');
56-
setTimeout(reconnect, 1000);
57-
});
58-
});
59-
60-
client.on('error', function(error){
61-
debuger("The socket had an error: " + error.code);
62-
setTimeout(reconnect, 1000);
63-
});
64-
65-
client.on('close', function() {
66-
debuger('The socket closed.');
67-
});
68-
69-
client.setTimeout(15000);
1+
module.exports = {
2+
client: require('./lib/client'),
3+
server: require('./lib/server')
704
}
71-
72-
function reconnect(){
73-
if (!hasShutdown){
74-
connect();
75-
}
76-
}
77-
78-
function close(shutdown = true) {
79-
hasShutdown = shutdown;
80-
if (client){
81-
client.end();
82-
client.destroy();
83-
client = null;
84-
}
85-
}
86-
87-
function send(cmd, arg){
88-
debuger('[Send] tag: ' + cmd + ' value: ' + (arg ? JSON.stringify(arg) : ''));
89-
if (client){
90-
var data = null, len = 0;
91-
if (arg){
92-
data = JSON.stringify(arg);
93-
len = Buffer.byteLength(data);
94-
}
95-
96-
// TLV pack
97-
98-
// Write the tag: use one byte
99-
var tagBuf = new Buffer(1);
100-
tagBuf.writeInt8(cmd, 0);
101-
client.write(tagBuf);
102-
103-
// Write the length of value: use four bytes
104-
var headBuf = new Buffer(4);
105-
headBuf.writeUInt32BE(len, 0);
106-
client.write(headBuf);
107-
108-
// Then, write the value
109-
if (len > 0){
110-
var bodyBuf = new Buffer(len);
111-
bodyBuf.write(data);
112-
client.write(bodyBuf);
113-
}
114-
} else {
115-
debuger("socket has not yet connected");
116-
}
117-
}
118-
119-
function onReceivePackData(data){
120-
var tag = data.tag;
121-
var value = data.value ? data.value.toString() : null;
122-
debuger('[Received] tag: ' + tag + ' value: ' + value);
123-
124-
if (value){
125-
value = JSON.parse(value);
126-
}
127-
128-
if (typeof receiveCallback === "function"){
129-
receiveCallback(tag, value);
130-
}
131-
}
132-
133-
function setDebuger(value){
134-
debuger = value;
135-
}
136-
137-
module.exports.setDebuger = setDebuger;
138-
module.exports.connect = connect;
139-
module.exports.close = close;
140-
module.exports.send = send;

lib/ExBuffer.js

+10-9
Original file line numberDiff line numberDiff line change
@@ -16,7 +16,7 @@ var ExBuffer = function (bufferLength) {
1616
var self = this;
1717
var _headLen = 2;
1818
var _endian = 'B';
19-
var _buffer = new Buffer(bufferLength || 512); //Buffer大于8kb 会使用slowBuffer,效率低
19+
var _buffer = Buffer.alloc(bufferLength || 512); //Buffer大于8kb 会使用slowBuffer,效率低
2020
var _readOffset = 0;
2121
var _putOffset = 0;
2222
var _dlen = 0;
@@ -64,16 +64,16 @@ var ExBuffer = function (bufferLength) {
6464
};
6565

6666
/**
67-
* 送入一端Buffer
67+
* 送入一段Buffer
6868
*/
69-
this.put = function(buffer,offset,len){
69+
this.put = function(buffer, offset, len) {
7070
if (offset == undefined) offset = 0;
7171
if (len == undefined) len = buffer.length - offset;
7272
//buf.copy(targetBuffer, [targetStart], [sourceStart], [sourceEnd])
7373
//当前缓冲区已经不能满足次数数据了
7474
if (len + getLen() > _buffer.length) {
7575
var ex = Math.ceil((len + getLen()) / 1024); //每次扩展1kb
76-
var tmp = new Buffer(ex * 1024);
76+
var tmp = Buffer.alloc(ex * 1024);
7777
var exlen = tmp.length - _buffer.length;
7878
_buffer.copy(tmp);
7979
//fix bug : superzheng
@@ -109,6 +109,7 @@ var ExBuffer = function (bufferLength) {
109109
buffer.copy(_buffer, _putOffset, offset, offset + len);
110110
_putOffset += len;
111111
}
112+
112113
proc();
113114
};
114115

@@ -135,8 +136,8 @@ var ExBuffer = function (bufferLength) {
135136
_readOffset += _tagLen;
136137
_dlen = _buffer['readUInt' + (8 * _headLen) + '' + _endian + 'E'](_readOffset);
137138
_readOffset += _headLen;
138-
}else {//
139-
var hbuf = new Buffer(_headLen + _tagLen);
139+
} else {//
140+
var hbuf = Buffer.alloc(_headLen + _tagLen);
140141
var rlen = 0;
141142
for (var i = 0; i < (_buffer.length + _tagLen - _readOffset); i++) {
142143
hbuf[i] = _buffer[_readOffset++];
@@ -160,7 +161,7 @@ var ExBuffer = function (bufferLength) {
160161
//console.log('_dlen:'+_dlen + ',unreadLen:'+getLen());
161162

162163
if (getLen() >= _dlen) {
163-
var dbuff = new Buffer(_dlen);
164+
var dbuff = Buffer.alloc(_dlen);
164165
if (_readOffset + _dlen > _buffer.length) {
165166
var len1 = _buffer.length - _readOffset;
166167
if (len1 > 0) {
@@ -177,7 +178,7 @@ var ExBuffer = function (bufferLength) {
177178
_dlen = 0;
178179
if (_tagLen > 0){
179180
//_tagLen = 0;
180-
self.emit("data", {tag:_tag, value:dbuff});
181+
self.emit("data", { tag:_tag, value:dbuff });
181182
} else {
182183
self.emit("data", dbuff);
183184
}
@@ -188,7 +189,7 @@ var ExBuffer = function (bufferLength) {
188189
} catch(e) {
189190
self.emit("error", e);
190191
}
191-
}else {
192+
} else {
192193
break;
193194
}
194195
}

0 commit comments

Comments
 (0)