Skip to content
Open
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
27 changes: 27 additions & 0 deletions .gitignore
Original file line number Diff line number Diff line change
@@ -0,0 +1,27 @@
# Logs
logs
*.log

# Runtime data
pids
*.pid
*.seed

# Directory for instrumented libs generated by jscoverage/JSCover
lib-cov

# Coverage directory used by tools like istanbul
coverage

# Grunt intermediate storage (http://gruntjs.com/creating-plugins#storing-task-files)
.grunt

# node-waf configuration
.lock-wscript

# Compiled binary addons (http://nodejs.org/api/addons.html)
build/Release

# Dependency directory
# https://www.npmjs.org/doc/misc/npm-faq.html#should-i-check-my-node_modules-folder-into-git
node_modules
13 changes: 13 additions & 0 deletions Makefile
Original file line number Diff line number Diff line change
@@ -0,0 +1,13 @@
TESTS = $(shell ls -S `find test -type f -name "*.test.js" -print`)


all: test

test:
./node_modules/.bin/mocha -r should $(TESTS)

benchmark bench:
./node_modules/.bin/matcha benchmark/*.js


.PHONY: all test benchmark bench
24 changes: 24 additions & 0 deletions README.md
Original file line number Diff line number Diff line change
Expand Up @@ -151,3 +151,27 @@ client.write({
```

目前easy_sock已经接入protobuf、jce、以及cmem等协议。如有任何意见欢迎交流 vicyao#tencent.com

## 事件

`write_timeout` 当 write 数据超时

`connect_timeout` 当初始化 socket 超时

`connect` 当 socket 连接成功时

`data` 当接收到数据时

`error` 当错误发生时

`close` 当 socket 关闭时

`idle` 当 socket 一直闲置时

## development

1. git clone this project

2. `$ npm install`

3. make test
98 changes: 98 additions & 0 deletions benchmark/multi_packet.js
Original file line number Diff line number Diff line change
@@ -0,0 +1,98 @@
var net = require('net')
var socketServer;
var serverSockets = []
var HOST = '127.0.0.1'
var PORT = 3000;
var EasySock = require('..')
var jsonstringify = JSON.stringify.bind(JSON)
var jsonparse = JSON.parse.bind(JSON)
var pedding = require('pedding')

function createServer(onData) {
onData = onData || function (socket) {
return function (data) {
socket.write(data)
}
}

socketServer = net.createServer(function (socket) {
serverSockets.push(socket)
socket.on('data', onData(socket))
})
socketServer.listen(PORT)

return socketServer;
}

function createEasySocket(_options) {
var options = {
ip: HOST,
port: PORT,
};

for (var k in _options) {
options[k] = _options[k]
}
var socket = new EasySock(options)

socket.isReceiveComplete = function (packet) {
return packet.length
}
socket.encode = function (data, seq) {
data.seq = seq
return new Buffer(jsonstringify(data))
}
socket.decode = function (data) {
data = jsonparse(String(data))
data.result = data.userid
return data
}

return socket
}


suite('multi packet', function () {
var socket;
before(function () {
createServer()

socket = createEasySocket()

socket.isReceiveComplete = function (packet) {
return packet.indexOf('}') + 1
}
})

after(function (done) {
if (socketServer) {
serverSockets.forEach(function (socket) {
socket.end()
})
socketServer.close(done)
} else {
done()
}
})

bench('multi packet', function (next) {
next = pedding(next, 3)

socket.write({
userid: 11
}, function (err, data) {
next()
})
socket.write({
userid: 12
}, function (err, data) {
next()
})
socket.write({
userid: 13
}, function (err, data) {
next()
})
})

})
81 changes: 81 additions & 0 deletions benchmark/one_packet.js
Original file line number Diff line number Diff line change
@@ -0,0 +1,81 @@
var net = require('net')
var socketServer;
var serverSockets = []
var HOST = '127.0.0.1'
var PORT = 3000;
var EasySock = require('..')
var jsonstringify = JSON.stringify.bind(JSON)
var jsonparse = JSON.parse.bind(JSON)

function createServer(onData) {
onData = onData || function (socket) {
return function (data) {
socket.write(data)
}
}

socketServer = net.createServer(function (socket) {
serverSockets.push(socket)
socket.on('data', onData(socket))
})
socketServer.listen(PORT)

return socketServer;
}

function createEasySocket(_options) {
var options = {
ip: HOST,
port: PORT,
};

for (var k in _options) {
options[k] = _options[k]
}
var socket = new EasySock(options)

socket.isReceiveComplete = function (packet) {
return packet.length
}
socket.encode = function (data, seq) {
data.seq = seq
return new Buffer(jsonstringify(data))
}
socket.decode = function (data) {
data = jsonparse(data)
data.result = data.userid
return data
}

return socket
}


suite('one packet', function () {
var socket;
before(function () {
createServer()

socket = createEasySocket()
})

after(function (done) {
if (socketServer) {
serverSockets.forEach(function (socket) {
socket.end()
})
socketServer.close(done)
} else {
done()
}
})

bench('one packet', function (next) {
socket.write({
userid: 11
}, function (err, data) {
next()
})
})

})
Loading